0

私のウェブサイトには数百万のエンティティが保存されています。訪問者は、タイトルにのみ含まれる単語を入力してエンティティを検索します。タイトルの長さは最大100文字です

これは、ユーザーが大きなブロブ内を検索する従来のドキュメント検索の場合ではありません。フィールドは非常に短いです。また、ここでの主な問題は、エンティティが「入力時に」(自動提案)提供されるため、パフォーマンス(関連性ではない)です。

よりスマートなルートは何でしょうか?

  • MySqlテーブル[word、entity_id]を作成し、'word'にインデックスを付けて
    から、search_indexからselectentity_id
    を使用してクエリを実行します。語。
  • Solrまたは同様の検索エンジンを使用してください。私の読書では、全文検索をより重視しています。

また、将来スペルの提案を紹介したい場合、これはどのように影響しますか。

ありがとうございました!

4

1 に答える 1

0

データベースのみのソリューションの利点:

  • セットアップとメンテナンスが少ない (データベースは既にある)
  • 検索結果を他のデータと結合したり、その他の方法で操作したい場合は、データベースでネイティブに行うことができます
  • タイム ラグ (Solr をデータベースと定期的に同期する場合) またはメンテナンス手順 (Solr のエントリをデータベースに挿入するたびにリアルタイムで追加/更新することを選択した場合) はありません。

Solr ソリューションの長所:

  • パフォーマンス: Solr はキャッシングを処理し、すぐに使用できます。
  • スペル チェック - スペル チェック タイプのものを実行する予定がある場合、Solr はこれをネイティブに処理します
  • Solr のセットアップとチューニングはそれほど難しくありませんが、Java アプリケーション サーバーに精通している場合は役に立ちます。
  • 単純な要件があるように見えますが、単語の検索に関して何らかのロジックを持っていると思います。Solrはこれを非常にうまく行います

また、将来の要件を検討することもできます (ドキュメントにタイトル フィールド以外のものがあり、何らかの関連性を割り当てたい場合はどうしますか? これらのエンティティの本文テキストを検索できるようにする場合や、および/またはたとえば、MS Word などの他の種類のドキュメントのインデックスを作成したい場合や、検索結果をファセット処理したい場合はどうすればよいでしょうか? Solr はこれらすべてに適しています)。

データベース内のすべての単語に対してエントリを作成する必要があるかどうかはわかりませんが、とにかく各単語でレコードを作成する場合は、単に '%[query_word]%' 検索を行う必要があります。要件は非常に単純に見えるため、最初はデータベースを使用する方が簡単かもしれません。データベースのパフォーマンスをスケーリングするのはかなり簡単です。

私たちは現場でSolrを使用しており、パフォーマンスが気に入っていて、非常に単純な検索にも使用しています. ただし、1 つ欠けているのは、Solr データとデータベース データを結合する方法です。そして、余分なメンテナンスがあります。結局のところ、簡単な答えはありません。

于 2010-09-13T17:31:46.003 に答える