MySQL全文搜索结果微调

问题描述

我有一个包含 5000 行的 InnoDB 表。这是我的名为“insitutes”的表的示例。

id| name

1   | University of London  
2   | Department of Maths University of London  
3   | Department of Biology University of London  
4   | Department of Chemistry University of London  
5   | Department of Physics University of London
...

这就是我的查询的样子

SELECT *,MATCH (name) AGAINST ('London University' IN BOOLEAN MODE) AS score
FROM  insitutes
WHERE MATCH (name) AGAINST ('London University' IN BOOLEAN MODE)
ORDER BY score DESC

这就是我的结果

Department of Biology University of London
Department of Maths University of London
Department of Chemistry University of London
University of London 
....

我想获得“伦敦大学”作为第一个结果。这么说我的意思是我想获得与搜索查询最接近的匹配。

通过使用我的数据,我发现将表类型更改为 MyISAM 并将查询修改为“IN NATURAL LANGUAGE MODE”会给我预期的结果。但是我不能使用表类型 MyISAM,因为它不会索引少于 4 个字符的单词。

解决方法

我们可以用作文本的任何字母。如果您有问题,请更清楚地告诉我。好吗?

我认为您可以像这样使用 Mysql 查询:

parseFloat

如果此声明有效,请检查此项,否则请更清楚地定义您的问题。

,

首先,您确实可以使用 ft_min_word_len 控制 MyISAM 全文索引中的最小字长。

SET ft_min_word_len= 3

或者任何你需要的,都会做。您可能还想确保它也在您的 MySQL my.cnf 文件中设置,因此如果您的服务器重新启动,它仍然设置。

其次,您的搜索词中的单词 of 位于 FULLTEXT stoplist 中。除非您将其从停止列表中删除,否则您无法将其用于匹配。

而且,如果您已经设法在索引中包含 of,请注意部门名称字符串包含它两次,这将提高他们的分数。

如果您更改 FULLTEXT 的配置,请务必重建您的索引。

第三,如您所知,结果集的顺序来自 FULLTEXT 分配给每一行的 score。 FULLTEXT 旨在帮助人类感知。它为人类提供了可供选择的选择,而不是精确正确的选择。期望从 FULLTEXT 获得完全可预测的结果可能是错误的。