在mysql上进行全文搜索,但词序必须很重要

cxfofazt  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(284)

我在布尔模式下使用match/against进行mysql搜索,但是我需要单词的顺序很重要。
假设我在“users”表的“names”列中有以下内容:

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

如果我在找辛普森·荷马,那么我需要的第一个结果是:
辛普森-朗森-荷马-杰伊
仅供参考,现在我使用以下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按“最佳匹配”排序,但答案对我不起作用。
我也为这个坏榜样道歉。
请不要使用%like%建议,因为查询的性能在我的环境中很重要

r8xiu3jd

r8xiu3jd1#

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

用双引号括起来的短语( " )字符只匹配按字面形式包含短语的行,因为它是键入的。
https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html
还要注意,使用全文 MATCH ... AGAINSTLIKE 在相同的查询结果中,优化器首先使用全文索引,然后使用 LIKE ,所以它可以是相当有效的,并表现良好。。。虽然这里不需要。

相关问题