9

私はテーブルplaces(name vachar(50), address text, description text) engine = MYISAMといくつかのレコードを持っています。

私はここでいくつかの例を試みており、「全文問題」を検索していますが、全文検索については明確ではありません。

まず、次の方法でフルテキストインデックスを追加します。

ALTER TABLE places ADD FULLTEXT(name, address, description);

そしてmySQLを試してください:

SELECT * FROM places WHERE MATCH(name,address,description) AGAINST('my search key');

コンテンツが多くのフィールドにある「検索キー」を試しましたが、次のような場合があります。

  • 行が選択されました。

  • 試してみるとadd option "IN BOOLEAN MODE" in AGAINST()、スコア= 1で得られた結果は、並べ替えても意味がありません。

  • 「検索キー」のフィールド(名前)にコンテンツがある場合の結果のみが表示されます。

私はたくさんの方法を試しましたが、すべてのケースを覚えているわけではありません、

どんな答えでも役に立ちます!

前もって感謝します!

4

3 に答える 3

11

キーワードがストップワードではないことを確認してください。ストップワードリストを無効または変更するには、システム変数を設定してサーバーを再起動するためのアクセス権が必要です。

また、キーワードが全文の最小単語長を満たしていることを確認してください。デフォルトの最小長は4です。

最後に、その単語がレコードの50%未満に表示されていることを確認します。MySQLは、単語がレコードの50%以上に含まれている場合、結果を返しません。

于 2012-05-10T12:52:21.077 に答える
7

マーカスの答えに加えて:

MySQLでFULLTEXTインデックスを最初に使用し始めたとき、結果が空になるという問題がありました。ストップワードを避け、十分な長さのストップワードを使用していたため、 MySQLのドキュメントに埋もれていることがわかるまで少し頭を悩ませていました。

50%のしきい値は、最初に全文検索を試してどのように機能するかを確認するときに重要な意味を持ちます。テーブルを作成し、そのテーブルに1行または2行のテキストのみを挿入すると、テキスト内のすべての単語が少なくとも50%で発生します。行の。結果として、検索は結果を返しません。必ず少なくとも3行、できればそれ以上の行を挿入してください。50%の制限を回避する必要があるユーザーは、ブール検索モードを使用できます

これは、ブールモードで動作するようにクエリを設定したときに結果が得られた(ただし「意味のない」スコアが得られた)理由も説明しています。

于 2012-08-13T22:58:31.420 に答える
0

同じ問題が発生しました。クエリは過去に機能していましたが、突然テストが失敗し始めました。クエリを分離することができましたが、実際、結果は返されませんでした。私が使用してboolean modeいたので、50%のルールで問題が発生することはありませんでした。

次のコマンドを実行して問題を解決しました。

OPTIMIZE TABLE organizations; # replace table name

書き込み/削除が多いと、MySQLインデックスが機能しなくなることがあると思います。代わりにエラーが発生しなかったのは不思議です。

于 2020-08-05T15:04:40.927 に答える