1

我以这种方式创建了全文索引:

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并且只有在其他结果之后?

如何优化此操作?

4

2 回答 2

3

尝试这个

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

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或更低的

于 2014-02-04T09:50:13.447 回答
0

您还需要“询问”分数。

尝试这个:

SELECT    *, MATCH(filter) AGAINST('{keyword}') as Relevance 
FROM      posts 
WHERE     MATCH(filter) AGAINST('{keyword}' 
ORDER BY  Relevance DESC
于 2014-02-04T09:50:45.107 回答