1

この方法でフルテキスト インデックスを作成しました。

CREATE FULLTEXT INDEX filter_index
ON posts (filter)

そして、検索用の私のコードは現在これです:

SELECT * FROM posts
WHERE MATCH(filter) AGAINST (?)

クエリは OK を実行し、私のテーブルには次の構造があります。

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

また、2 つの異なる分野を優先して検索したい場合。検索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 番目 (2) はORDER BY (relevance_from * 2) + relevance DESC、優先度を 2 倍にします。場合によっては、これが高くなる可能性があります。1.5以下のようなものを試すことができます

于 2014-02-04T09:50:13.447 に答える