我以这种方式创建了一个全文索引:
CREATE FULLTEXT INDEX filter_index
ON posts (filter)
目前我的搜索代码是这样的:
SELECT * FROM posts
WHERE MATCH(filter) AGAINST (?)
查询执行正常,在我的表中有以下结构。
ID | name | from | filter
1 John Paris - France | John Paris France
2 Carey Paris - France | Carey Paris France
3 Maria France - Vion | Maria France Vion
4 Alfredo US New York | Alfredo US New York
5 JohnD Colombia | JohnD Colombia
如果我查询以下内容:
SELECT * FROM posts
WHERE MATCH(filter) AGAINST ('France Vion')
这会让我首先得到结果:
John Paris France & Carey Paris France
之后是 Maria France Vion
。
这不应该有所不同吗?首先是 Maria France Vion
,然后才是其他结果?
如何优化此操作?
最佳答案
试试这个
SELECT *, MATCH(filter) AGAINST('France Vion' IN BOOLEAN MODE) as relevance
FROM posts_locale
WHERE MATCH(filter) AGAINST('France Vion' IN BOOLEAN MODE)
ORDER BY relevance DESC
另外如果你想搜索两个不同的字段并给予优先级。类似于搜索 from
和 filter
但给予 from
filed
SELECT *,
MATCH(filter) AGAINST('France Vion' IN BOOLEAN MODE) as relevance,
MATCH(`from`) AGAINST('France Vion' IN BOOLEAN MODE) as relevance_from
FROM posts
WHERE MATCH(`from`, filter) AGAINST('France Vion' IN BOOLEAN MODE)
ORDER BY (relevance_from * 2) + relevance DESC
这里的第二个 (2) ORDER BY (relevance_from * 2) + relevance DESC
使优先级加倍。在某些情况下,这可能很高。您可以尝试 1.5
或更低版本
关于MySQL 匹配和喜欢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548769/