我在布尔模式下使用MATCH/ matters进行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或其他互联网上没有找到一个好的答案--最接近的话题是:,但答案对我来说不起作用。
我也为这个糟糕的例子道歉。
请不要有%LIKE%的建议,因为查询的性能在我的环境中很重要
发布于 2018-06-18 08:36:26
... AGAINST('+"SIMPSON HOMER"' IN BOOLEAN MODE)
包含在双引号(
"
)字符中的短语仅匹配按字面意思包含该短语的行。
https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html
另请注意,在同一查询中使用全文MATCH ... AGAINST
和 LIKE
会导致优化器首先使用全文索引,然后使用LIKE
仅过滤匹配的行,因此它可能非常有效且性能良好……虽然这里不应该需要它。
https://stackoverflow.com/questions/50900795
复制相似问题