1

テーブルの全文検索に次のクエリを使用します。

SELECT Titel FROM cmsa WHERE MATCH(Titel) AGAINST ('+"Ort" +"Berlin"' IN BOOLEAN MODE)

しかし、結果は空です。

私が使用する場合

SELECT Titel FROM cmsa WHERE Titel LIKE '%Berlin%'

結果は次のようになります (引用符なし):

"Ort - Berlin"

全文検索でこの結果が見つからなかった理由。「Ort」という単語と「Berlin」という単語は、どちらもエントリのタイトル フィールドにあります。

他の全文検索はうまく機能します。

何か案が?

4

3 に答える 3

2

MySQL にはサーバー パラメータがあるためだと思います - The minimum length of the word to be included in a FULLTEXT index。このパラメーターのデフォルト値は 4 であるため、最初の単語Ortはこのインデックスに含まれません。このシステム パラメータを変更し、サーバーを再起動してから、すべての FULLTEXT インデックスを再構築する必要があります。

REPAIR TABLE cmsa QUICK;
于 2013-01-25T10:27:20.280 に答える
2

二重引用符なしで試して、Mysql エンジンがMYISAM

SELECT 
         Titel 
FROM 
         cmsa 
WHERE 
         MATCH(Titel) AGAINST ('+Ort +Berlin' IN BOOLEAN MODE)

いくつかの説明

ブールモード検索

SELECT headline, story FROM news
WHERE MATCH (headline,story)
AGAINST ('+Hurricane -Katrina' IN BOOLEAN MODE);

上記のステートメントは、ハリケーンに関するニュース記事には一致しますが、ハリケーン カトリーナに言及するニュース記事には一致しません。

クエリ拡張

ブラインド クエリ拡張 (または自動関連性フィードバック) 機能を使用して、検索結果を拡張できます。これには多くの場合、より多くのノイズが含まれ、非常にあいまいな検索になります。

ほとんどの場合、ユーザーのクエリが数件の結果しか返さなかった場合にこの操作を使用します。WITH QUERY EXPANSION でもう一度実行すると、クエリ内の単語と一緒によく見られる単語が追加されます。

SELECT headline, story FROM news
WHERE MATCH (headline,story)
AGAINST ('Katrina' WITH QUERY EXPANSION);

上記のクエリは、カトリーナを含むものだけでなく、ハリケーンに関するすべてのニュース記事を返す可能性があります。

MySQL での全文検索に関するいくつかのポイント:

  • 検索では大文字と小文字が区別されません
  • 短い単語は無視されます。デフォルトの最小長は 4 文字です。変数 ft_min_word_len および ft_max_word_len を使用して、最小語長と最大語長を変更できます。

  • ストップワードと呼ばれる単語は無視されます。独自のストップワードを指定できますが、デフォルトの単語には the、have、some が含まれます - デフォルトのストップワード リストを参照してください。

  • 変数 ft_stopword_file を空の文字列に設定することで、ストップワードを無効にすることができます。
  • 全文検索は、MyISAM ストレージ エンジンでのみサポートされています。
  • 行の 50% を超える単語が存在する場合、重みはゼロになります。これは、大規模なデータセットでは利点がありますが、小規模なデータセットではテストが困難になる可能性があります。
于 2013-01-25T09:55:09.090 に答える
-1

あなたのクエリは私にとって完璧に機能していました。全文検索は myisam エンジンでのみ機能するため、テーブルが MYISAM であるかどうかを確認してください。

于 2013-01-25T10:13:10.527 に答える