0

MySQL のフルテキストを使用して混乱することはほとんどありません。utf-8文字セットが設定され、照合が設定されているデータベースがありますutf8_unicode_ci

商品検索の流れは以下の通りです。ユーザーは以下のフローから選択して製品を検索します

  • ユーザーは product_type を選択し、値が消耗品/非消耗品の列挙型フィールドです。
  • 次に、product_nature、enum 0=>finished 1- unfinished を選択します。
  • ユーザーが場所を選択すると、varchar ユーザーは複数の場所を選択できます。
  • 次に、ユーザーが価格帯などを指定します (さらに 5 つほど選択します) 検索ページでユーザーが入力するのは、場所、価格帯だけです。コンボから選択したすべてを休ませます。

私の混乱はです。

  1. 私のデータベースは全文検索をサポートしていますか?
  2. 全文検索を有効にするためにインデックスを作成する必要があるフィールドは何ですか?
  3. 全文はデータ型フィールドでのみサポートさvarcharれています。textユーザーがフィルター用に選択した多くのフィールドが含まれている場合に関連する結果を取得する方法enum
  4. 上記のように、ユーザーが選択したフィルターに応じて、完全に一致する製品とほぼ一致する製品を表示したいと考えています。タイプのフィールドが多数あるため、ここではフルテキストの関連性による順序付けは機能しますかenum

編集 例をよりよく理解するために

この検索は、何を買うべきかは知っているが、それ以外は何も知らないという特別な人のためのものです。携帯電話が必要なようですが、他に何も知りません。コンボからそのタイプ (Wifi/Wi-Fi なし) を選択し、カメラ (あり/なし) を選択し、このような他のいくつかの機能を選択します。次に、手頃な価格帯を指定し、特定の場所の店舗で電話を入手できるようにします。このために、私はタイプしlocation A, location B, location Cます。これらの場所のいずれかに基づく結果が必要です。そして、指定された検索パラメーターの最も近い一致に従って結果を並べ替えたいと思います。最も近い一致に完全に一致し、最も近い一致が最も少なくなります。お役に立てれば

誰かがこれに光を当てることができますか?

ありがとう

4

2 に答える 2

3
  1. Full-Text Search Functionsこのページのドキュメントには、FULLTEXTMyISAM でのみ使用できると記載されています、MySQL 5.6FULLTEXTでは InnoDB を使用したインデックスのサポートが追加されました (Section 14.2.4.12.3ページの をInnoDB Table and Index参照)。テーブルが MyISAM としてセットアップされている場合は、はい - サポートが必要です。InnoDB で、潜在的に - MySQL バージョンで保留中。

  2. 全文検索を有効にするにFULLTEXTは、検索を使用するフィールドにのみインデックスを追加する必要があります (使用しないフィールドに追加しても意味がありません)。インデックスは、、および列タイプにのみ適用できるため、それが出発点になる可能性がありますFULLTEXT。あなたの製品名はインデックスを気にするには短すぎる かもしれませんが (代わりに HASH インデックスを検討してください)、製品の説明 (ある場合) は非常に適しています。CHARVARCHARTEXTFULLTEXT

  3. enumデータは、BTREEインデックスではなくインデックスでインデックス化するのに適していますFULLTEXT

  4. わからない; 必要なものについてより良いイメージを与えるために、どのフィールドが照会および順序付けされるか、およびそれらのデータ型の例を投稿できますか?

于 2012-10-02T15:28:26.240 に答える
2
  1. MySQL は MyISAM テーブル タイプのフルテキストをサポートし、5.6.x の時点でどこかで InnoDB テーブルのフルテキストをサポートしています。
  2. 全文検索を行うフィールドに全文索引を追加します。int/binary/float フィールドのフルテキストは意味がないため、基本的に、フルテキスト検索を実行する必要がある varchar/text フィールドはすべて
  3. 列挙型は完全一致のみを目的としているため、列挙型のフルテキストは意味がありません
  4. 内部関連性スコアでフルテキストの結果を並べ替えることができます。
于 2012-10-02T15:29:36.127 に答える