在mysql

时间:2019-03-03 11:43:24

标签: mysql sql full-text-search

我有一个数据库,其中有一个表叫毒品。在该字段中称为'Description'的字段具有全文索引。我想搜索类似的单词“ Acifree -O 10ml ”,“ Acifree O 10ml ”。

我尝试了以下查询,

SELECT * FROM drugs where SOUNDEX(Description) = SOUNDEX('Acifree -O 10ml');

但是查询返回以下值

|ID  |Description          |
----------------------------
|177 |Acifree -O 10ml      |
|541 |Acifree O 10ml       |
|817 |Acifree -O 5ml       |
|817 |Acifree -O 7ml       |
|916 |Acifree -O 5 ml      |

我只需要' Acifree -O 10ml '和' Acifree O 10ml '值。喜欢

|ID  |Description          |
----------------------------
|177 |Acifree -O 10ml      |
|541 |Acifree O 10ml       |

有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用聚合函数尝试以下操作

select *, MATCH(Description) AGAINST('Acifree -O 10ml' IN NATURAL LANGUAGE MODE)
as score
from tutorial 
where MATCH(Description) AGAINST('Acifree -O 10ml' IN NATURAL LANGUAGE MODE)
and MATCH(Description) AGAINST('Acifree -O 10ml' IN NATURAL LANGUAGE MODE)=
(select  max(MATCH(Description) AGAINST('Acifree -O 10ml' IN NATURAL LANGUAGE MODE))
from tutorial
)

demo link

输出

id  description score
1   Acifree -O 10ml 0.15835624933242798
2   Acifree O 10ml  0.15835624933242798

在WHERE子句中使用MATCH()时,返回的行将自动按照相关性最高的顺序进行排序。 相关性值是非负浮点数。 零相关性意味着没有相似性。 相关性基于-

  • 行中的单词数
  • 该行中唯一词的数量
  • 集合中的单词总数
  • 文件数 (行)包含特定单词

因为您需要最好的相关性,所以我获得了最高分