0

MySQL の FULLTEXT 検索の使用に関するヘルプを見つけようとしています。これが死ぬほど議論されていることは認識していますが、簡潔な結果セットを取得する方法がよくわかりません。

「product_name」テーブルに FULLTEXT インデックスが設定された、たとえば 500,000 個の製品の MyISAM テーブルがあります。

基本的なクエリは次のようになります。

SELECT * from products MATCH(product_name) AGAINST ("coffee table") AS relevance 
WHERE MATCH(product_name) AGAINST ("coffee table").

コーヒーまたはテーブルに関連する数百の製品のリストを入手しました。これは十分に具体的ではなく、有用な結果があまりにも多くの他の項目で雑然としていることを意味していました.

MATCH を使用して各結果に関連性を与えるようにクエリを変更し、LIKE を使用して実際のクエリを実行しました。

SELECT * from products MATCH(product_name) AGAINST ("coffee table") AS relevance 
WHERE ((product_name like "%coffee%" AND product_name like "%table%") or product_name like "%coffee table%")

このアイデアは、Wordpress がどのように検索を実行するかを見て得たものです。これは、誰かがより具体的なキーワードで検索を実行するまではうまくいきました。実際の例は、「ナイキ ブレザー ロー プレミアム ヴィンテージ」の検索です。この場合、結果はありませんでした (一方、MATCH を使用する最初のメソッドは数百を返しました)。

IN BOOLEAN MODE を使用できることはわかっていますが、多くのユーザーは +/- 演算子を使用してクエリを変更する方法を知りません。HAVING 句を使用して結果を制限する方法をまだ考えていません。

また、これは共有ホスティングであるため、デフォルトの最小単語長を変更できません。これは、たとえば、色「赤」やブランド名「GAP」などのキーワードが欠落していることを意味します。

キーワード インデックス テーブルの作成について少し読んだことがありますが、適切な参考文献が見つかりませんでした。

簡潔な結果セットを提供する製品検索用語 (Joe Public が入力したもの) を使用できるソリューションを誰か提供してもらえませんか。ありがとう

4

1 に答える 1

0

私はさらに調査を行いましたが、多くの人が言っているように、検索のような「人間」には良い解決策ではありません。一例として、単語の複数形 (car / cars) の処理方法があります。Apache Lucene を調べましたが、セットアップと構成が私の能力を超えています。

今のところ、「解決策」は固執するIN BOOLEAN MODEことでした(Mathieuも提案したように)。

于 2012-11-22T11:33:26.250 に答える