私はこの方法でフルテキストインデックスを作成しました:
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
そしてその後になって初めて他の人が結果を出しますか?
この操作を最適化するにはどうすればよいですか?
これを試して
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
以下のようなものを試すことができます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加