Mysql全文索引搜索返回奇怪的结果

Mysql全文索引搜索返回奇怪的结果,mysql,sql,full-text-search,Mysql,Sql,Full Text Search,我有一张配料表。我想要所有那些有特定成分的食谱。下面是我的表格结构 Table(ingredient) - Applied fulltext index on ingredient column. ------------------------------------------------------ ingredientID rcteID ingredient 310 1 Mint Leaves 311

我有一张配料表。我想要所有那些有特定成分的食谱。下面是我的表格结构

Table(ingredient) - Applied fulltext index on ingredient column.
------------------------------------------------------
 ingredientID   rcteID  ingredient  
    310           1     Mint Leaves     
    311           1     Corriender Leaves   
    312           1     GreenChili
我试图在全文搜索查询下获取上面的记录,但没有获取该记录

SELECT `Ingredient`.`ingredientID` , `Ingredient`.`rcteID`
FROM `ingredient` AS `Ingredient`
WHERE MATCH (`Ingredient`.`ingredient`) 
      AGAINST ('+Mint Leaves +Corriender Leaves +Greenchili' IN BOOLEAN MODE)
AND `Ingredient`.`rcteID`
IN ( 1 )
GROUP BY `Ingredient`.`rcteID`
为什么上述查询不适用于上述记录

当我尝试下面的查询时,它成功了。刚刚更改了搜索文本。

SELECT `Ingredient`.`ingredientID` , `Ingredient`.`rcteID`
FROM `ingredient` AS `Ingredient`
WHERE MATCH (`Ingredient`.`ingredient`) 
      AGAINST ('+Greenchili +Mint Leaves +Corriender Leaves' IN BOOLEAN MODE)
AND `Ingredient`.`rcteID`
IN ( 1 )
GROUP BY `Ingredient`.`rcteID`

OUTPUT
--------------------
ingredientID    rcteID
311               1

我不明白发生了什么事。为什么第一个查询不返回任何结果,而下面的查询返回结果?

这不是真正的解释,但您可以运行此查询查看分数

SELECT MATCH (`Ingredient`.`ingredient`) 
      AGAINST ('+Mint Leaves +Corriender Leaves +Greenchili' IN BOOLEAN MODE)
FROM `ingredient` AS `Ingredient`
WHERE MATCH (`Ingredient`.`ingredient`) 
      AGAINST ('+Mint Leaves +Corriender Leaves +Greenchili' IN BOOLEAN MODE)
我相信你的查询意味着:找到每种成分都含有所有这些薄荷叶、Corriender叶、绿辣椒,而这些成分在你的数据集中是找不到的。MySQL找不到包含上述所有关键字的任何行

但是,如果将查询放在括号中,情况就不同了:

SELECT `Ingredient`.`ingredientID` , `Ingredient`.`rcteID`
FROM `ingredient` AS `Ingredient`
WHERE MATCH (`Ingredient`.`ingredient`) 
      AGAINST ('(+Greenchili) (+Mint Leaves) (+Corriender Leaves)' IN BOOLEAN MODE)
AND `Ingredient`.`rcteID`
IN ( 1 )
GROUP BY `Ingredient`.`rcteID`
此查询可转换为:获取至少包含以下内容之一的成分:薄荷叶、Corriender叶、绿辣椒,并按rcteID对其进行分组

更新:

SELECT t1.rcteID FROM `ingredient` t1
    JOIN `ingredient` t2 ON t2.rcteID = t1.rcteID
    JOIN `ingredient` t3 ON t3.rcteID = t2.rcteID
WHERE 
    MATCH (t1.`ingredient`) AGAINST ('+Greenchili' IN BOOLEAN MODE)
AND
    MATCH (t2.`ingredient`) AGAINST ('+Mint Leaves' IN BOOLEAN MODE)
AND 
    MATCH (t3.`ingredient`) AGAINST ('+Corriender Leaves' IN BOOLEAN MODE)
AND t1.`rcteID` IN ( 1 )
GROUP BY t1.`rcteID`

我想这个问题对你会有用的。基本上,它与您的想法相同,但它分别查找3个关键字,只获取包含3个成分的rcteID。

那么,您希望在第一次查询中返回这3个关键字中的哪些记录,以及它实际返回的哪些记录?刚刚编辑了我的问题。你们可以看到我得到的结果。我想要那个些包含所有这三种成分的rcteID,而不是至少一种。您能告诉我如何编写该查询吗?看来,这不是一种有效的方法,因为我们需要与我的关键字一样多次地加入表。