【发布时间】:2015-04-01 10:09:33
【问题描述】:
如何进行 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%'
但我不想使用LIKE。
【问题讨论】:
-
一种选择是寻找 mysql 的 FULLTEXT 的替代品,例如 sphinx。 sphinxsearch.com/blog/2014/02/07/use-sphinx-with-mysql
标签: mysql search full-text-search