在MySQL中搜索相似的单词
我有一个数据库,里面有一张叫毒品的桌子。其中有一个名为"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 |
有什么解决方案吗?
解决方案
您可以使用聚合函数进行如下尝试
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()
时,首先自动对返回的行进行相关性最高的排序。
相关性值是非负浮点数。
零相关性意味着没有相似性。
相关性是根据-
- 行中的字数
- 该行中唯一字的数量
- 集合中的总字数
- 文档数 (行)包含特定单词
因为您需要最相关的,所以我取了最高分
相关文章