Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-具有部分单词匹配和相关性得分的高效搜索(全文)_Mysql_Search_Full Text Search - Fatal编程技术网

MySQL-具有部分单词匹配和相关性得分的高效搜索(全文)

MySQL-具有部分单词匹配和相关性得分的高效搜索(全文),mysql,search,full-text-search,Mysql,Search,Full Text Search,如何进行MySQL搜索,既能匹配部分单词,又能提供准确的相关性排序 SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance FROM subjects WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) 布尔模式的问题是相关性总是返回1,因此结果的排序不是很好。例如,如果我将搜索结果限制为5,那么返回的结果有时似乎不是最相关的 如果我在自然语言模式下搜索,

如何进行MySQL搜索,既能匹配部分单词,又能提供准确的相关性排序

SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE)
布尔模式的问题是相关性总是返回1,因此结果的排序不是很好。例如,如果我将搜索结果限制为5,那么返回的结果有时似乎不是最相关的

如果我在自然语言模式下搜索,我的理解是相关性分数是有用的,但我无法匹配部分单词

是否有方法执行满足所有这些条件的查询:

  • 可以匹配部分单词
  • 结果以准确的相关性返回
  • 效率高
到目前为止,我得到的最好结果是:

SELECT name
FROM subjects
WHERE name LIKE 'mat%'
UNION ALL
SELECT name
FROM subjects
WHERE name LIKE '%mat%' AND name NOT LIKE 'mat%'

但是我不希望像使用那样使用

MySQL 5.6中新的InnoDB全文搜索功能在这种情况下会有所帮助。 我使用以下查询:

SELECT MATCH(column) AGAINST('(word1* word2*) ("word1 word1")' IN BOOLEAN MODE) score, id, column 
FROM table
having score>0
ORDER BY score 
DESC limit 10;

其中
()
将单词分组到子表达式中。第一组有
类似单词%
的意思;第二种方法寻找确切的短语。分数以浮动的形式返回。

一年后,我在这个(有些)重复的问题中得到了一个很好的解决方案:


一个选择是寻找mysql全文的替代品,比如sphinx。为什么要搜索两个组?两组的比赛都能得到更高的分数吗?(似乎不是…)在我的搜索词之后添加
*
,这对我有帮助。