0

私はPHP(MySQLバックエンド)でプロトタイプのオークション/リストプロジェクトを書いています。

リストテーブル(listings)と、各アイテムを説明する複数のキーフレーズを持つキーフレーズテーブル(listings_keyphrases)があります。各リストには複数のキーフレーズ(必要な数)がありますが、各キーフレーズの文字数は20文字に制限されています。

したがって、listings_keyphrasesには、たとえば、1つのリストに対して6つの行があり、それぞれに異なるキーフレーズが含まれている可能性があります。Listings_keyphrasesテーブルのキーフレーズは順序付けられています。

次のような検索機能を実装したいと思います。

  1. 特定のアイテムに関連するすべてのキーフレーズを検索します
  2. 以下に基づいて結果を並べ替えます。
    • フレージング(検索フレーズが特定のキーフレーズと完全に一致する場合)
    • キーフレーズの順序(検索が位置1のキーフレーズと一致する場合は、より関連性が高いと思います)。

MySQL FULLTEXTと他のいくつかのオプションを調べましたが、今後の最善の方法がわかりませんでした。何か案は?

4

2 に答える 2

3

次の検索エンジンのいずれかを試してみます。

http://lucene.apache.org/solr/

http://sphinxsearch.com/

どちらもオープンソースであり、十分に文書化されており、使いやすいです。

于 2012-07-02T16:37:48.317 に答える
1

検索フレーズが特定のキーフレーズと完全に一致する場合、ソート結果の1つが表示されるため、検索には全文を使用する必要があると思います。全文検索を使用すると、より多くのスコアが得られます。

2番目の順序では、(全文の関連性ではなく)ある種の関連性を定義する必要があります。いくつかのキーフレーズを検索するとき、mysqlはそれが最初であるか最後であるかを気にしないので、それを伝える必要があります。キーフェーズの挿入の順序が重要な場合は、全文検索の関連性とID_keyphraseの結果を並べ替えることができます(ID_keyphraseが自動数値であると想定)。または、関連性を示すフィールドを追加するか、位置を使用できます(ただし、位置はのフィールドとして使用できます)。データベース)。

例:

Keyphrase_table
-----------
ID
listing_table_id
keyphrase
relevance

これであなたは持つことができます:

1   1  keyphrase2  1
2   1  keyphrase1  2
3   2  keyphrase1  1

id = 1のリストには2つのキーフレーズ(keyphrase2とkeyphrase1)があり、id = 2のリストには1つのキーフレーズ(keyphrase1)があります

フルテキストで「keyphrase1」を検索すると、結果はレコード2と3になります。両方が同じであるため、2つの結果はすべてフルテキストと同じ関連性がありますが、注文として新しいフィールド「relevance」を検索に追加すると(Order by THE_RELEVANCE_OF_FULLTEXT DESC,relevance ASC)レコード3は、全文の要件を満たし、結果が最も低い位置にあるため、常に最初になります。

于 2012-07-02T16:43:36.327 に答える