MySQL上的全文搜索,但字顺序必须重要

时间:2018-06-17 21:56:50

标签: mysql full-text-search myisam match-against

我正在使用MATCH / AGAINST在BOOLEAN模式下进行MySQL搜索,但我需要这个词的顺序很重要。

假设我在列"名称"上有以下内容:在表格"用户":

  +---------------------------------+
  | names                           |
  +---------------------------------+
  | RONSON SIMPSON HOMER JAY        |
  | SIMPSON RONSON HOMER JAY        | 
  | RONSON SIMPSON JAY HOMER        |
  | SIMPSON RONSON JAY HOMER        |
  +---------------------------------+

如果我正在寻找SIMPSON HOMER,那么我需要的第一个结果是:

  • SIMPSON RONSON HOMER JAY

仅供参考,现在我使用以下SQL查询:

SELECT *, MATCH(names) AGAINST('+SIMPSON +HOMER') AS relevance FROM users WHERE MATCH(names) AGAINST('+SIMPSON +HOMER' IN BOOLEAN MODE) HAVING relevance > 0.2 ORDER BY  relevance DESC, names ASC LIMIT 30;

我问,因为我没有在SOF或其他互联网上找到一个好的答案 - 最接近的主题是:MySQL order by "best match" ,但是答案对我不起作用。

我也为这个坏榜样道歉。

请不要%LIKE%建议,因为查询的效果在我的环境中很重要

1 个答案:

答案 0 :(得分:0)

... AGAINST('+"SIMPSON HOMER"' IN BOOLEAN MODE)
  

双引号(")字符中包含的短语仅匹配包含短语的行,因为它是键入的。

     

https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html

另请注意,在同一查询中使用全文MATCH ... AGAINST LIKE会导致优化程序首先使用全文索引,然后使用{{仅过滤匹配的行1}},所以它可以非常有效并且表现良好......虽然它不应该需要,在这里。