2

次のようなクエリの結果を比較しています

SELECT * FROM object_search
WHERE
    keywords LIKE '%,woman,%'
AND keywords LIKE '%,man,%'

SELECT * FROM object_search
WHERE
    MATCH (keywords) AGAINST ('+(",woman,") +(",man,")')

私はまったく同じ結果を期待していましたが、最初のクエリは約 300 の結果を吐き出し、2 番目のクエリは 3000 近くの結果を吐き出しました。

この 2 つの違いは何ですか? また、フルテキスト機能を使用して同じ結果を得るにはどうすればよいですか?

4

1 に答える 1

1

演算子は+検索で使用されますIN BOOLEAN MODE。(デフォルト)では無視されると思います。NATURAL LANGUAGE MODE

試す:

SELECT * FROM object_search
WHERE MATCH (keywords)
    AGAINST ('+woman +man' IN BOOLEAN MODE); -- could return rows containing both "man" and "woman" (ignoring ft_min_word_len, see below)

さらに、フルテキスト インデックスは単語のみをカバーします。句読点 ( など,) は常に無視されます。英数字以外の文字は「全文検索」できません。

最後に、デフォルトでは、4 文字未満の単語は無視されます。したがって、デフォルトでは「man」は索引付けされていません。この制限は、ft_min_word_len構成オプションを使用して変更できます。

また、ストップワード(索引付けされない一般的な単語) にも注意してください。

于 2013-09-25T13:55:20.513 に答える