sql >> データベース >  >> RDS >> Mysql

MySQL全文検索ミステリー

    MySQLドキュメント から

    • + 先頭のプラス記号は、この単語が返される各行に存在する必要があることを示します。

    • * アスタリスクは、切り捨て(またはワイルドカード)演算子として機能します。他の演算子とは異なり、影響を受ける単語にアスタリスクを追加する必要があります。 *演算子の前の単語で始まる単語は一致します。

      単語が切り捨て演算子で指定されている場合、その単語が短すぎる(ft_min_word_len設定から決定される)またはストップワードであっても、ブールクエリから削除されません。これは、単語が短すぎるまたはストップワードと見なされないために発生しますが、プレフィックスとしてドキュメントに存在する必要があり、プレフィックスで始まる単語の形式である必要があります

    状況に応じて:

    MATCH(...)AGAINST(...)

    MATCH(name)AGAINST('+ ski *'IN BOOLEAN MODE) name内の単語が含まれる行を検索していることを意味します 列が含まれている必要があります スキー 、および開始する必要があります skiという言葉で 。

    投稿したセットから、 Dartmouth Skiway 唯一のname これらの要件に準拠しています。skiという単語が含まれています。 、接頭辞として skiという単語が付いています 。

    他のname 列、ただし最初のルールに一致します: skiが含まれている必要があります 接頭辞はありません スキー 、あなたのルールで規定されているように。ブール検索によって返される行は、 nameを持つ唯一の行です。 両方が含む単語を含む列 スキー 接頭辞という単語です skiによる 。

    ajrealが提案しているように、 ft_min_len_word_settingを減らしてみてください my.cnfで 。デフォルト設定のため、検索で期待する結果が得られない可能性があります。 3に減らしてみてください。

    %text%のような列の場所

    WHERE name LIKE "%ski%" nameの行を検索します skiを含む列 、単語がどこにあるかに関係なく。



    1. Rails 4MySQLbigIntの主キーの問題とエラー

    2. mysqlリソース文字列の最初の行を取得しますか?

    3. Postgresqlを修正するためにHomebrewのreadlineバージョン6.xに戻りますか?

    4. JPAを使用してUUIDを文字列としてmysqlに保存する