0

いくつかのテーブルを検索する必要がある検索機能を構築しています。最初に、検索する必要があるすべてのフィールドに FULL TEXT インデックスを追加しました (したがって、複数のフィールドに 1 つのインデックスを追加します)。

次に、PHP で次のクエリを実行します。

SELECT * FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word')

これは正しいアプローチですか?または、各フィールドに個別にインデックスを追加し、クエリも分離する必要があります ( MATCH (field1) AGAINST ... OR MATCH (field2) AGAINST...)。

2つの違いは何ですか?

4

1 に答える 1

1

私の知る限り、FULL TEXT インデックス + MATCH メソッドは有効であり、問​​題はないはずです。3 つのフィールドが CHAR、TEXT、または VARCHAR のいずれかであることを確認してください。

MATCH の「スコア」を取得することにも興味があるかもしれません。次のように実行できます。

SELECT *, MATCH (field1, field2, field3) AGAINST('search word') as score FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word') ORDER BY score

この「スコア」は、見つかった各一致の良さを示します。

もご覧になるといいかもしれませんIN BOOLEAN MODE。AGAINST パーティクル ( ) の直後に配置する必要があります。GoogleAGAINST('search word') IN BOOLEAN MODE検索と同様に、検索で演算子が考慮されます。

例えば:

+table: すべての一致に「table」という単語が含まれている必要があります。

~table: 'table' という単語はどのマッチにも現れてはなりません。

于 2013-02-14T15:54:29.230 に答える