特定の列/フィールドの関連性に基づいた結果の重み付けを使用して、複数の列に全文検索を実装する必要があります。
私が遭遇したすべてのソリューションは、関連性を計算するために単一列のインデックスを使用し、WHERE
句には 1 つの複数列のインデックスを使用しているようです。参照: https://stackoverflow.com/a/600915/168719またはhttps://stackoverflow.com/a/6305108/168719
ここに私のクエリがあります:
SELECT MATCH(name) AGAINST (text) as relevance_name,
MATCH(description) AGAINST(text) as relevance_description,
MATCH(description_long) AGAINST (text) as relevance_description_long
FROM products WHERE
そして、私は次の選択に直面しています:
a)
MATCH(name, description, description_long) AGAINST (text) > 0
b)
MATCH(name) AGAINST (text) > 0
OR MATCH(description) AGAINST (text) > 0
OR MATCH(description_long) AGAINST (text) > 0
その後、ソート節が続きます。
ORDER BY (relevance_name * 2 +
relevance_description * 3 +
relevance_description_long * 4) / 9
問題は、 bに対するa (明らかに好ましい方法)の優位性は何ですか?
aでは、(検索可能なすべての列にわたって) 別のフルテキスト インデックスを作成する必要があり、明らかにより多くのディスク領域が必要になります。
利点は何ですか?それはパフォーマンスの問題ですか?それとも検索品質?