69

Web サイトの検索機能を実装したいと考えています (SO に似ていると仮定します)。私はそのようなもののGoogle検索を使用したくありません.

私の質問は:

これを実装するにはどうすればよいですか?

私が知っている2つの方法があります:

  1. ユーザーがクエリを実行すると、アプリケーション内のすべてのデータベースが検索されます。
  2. 私が持っているすべてのデータにインデックスを付けて別の場所に保存し、そこからクエリを実行します (Google のように)。

どちらに行くべきか誰か教えてくれませんか?長所と短所は何ですか?

もっと良い、これを行うためのより良い方法はありますか?

4

7 に答える 7

39

lucene を使用します。http:
//lucene.apache.org/java/docs/

Apache Lucene は、完全に Java で記述された高性能でフル機能のテキスト検索エンジン ライブラリです。これは、全文検索を必要とするほぼすべてのアプリケーション、特にクロスプラットフォームに適したテクノロジです。

Java と .net で利用できます。これは、zend フレームワーク モジュールの形式で php でも利用できます。

Lucene はあなたが望むこと (検索されたアイテムのインデックス作成) を行います。Lucene インデックスを追跡する必要がありますが、パフォーマンスの点ではデータベース検索を行うよりもはるかに優れています。ところで、SO 検索は lucene を利用しています。:D

于 2008-08-29T10:09:40.830 に答える
36

それはあなたのウェブサイトがどれだけ包括的で、あなたが自分でどれだけやりたいかによります。

カスタム検索を追加する可能性がない小さなウェブサイトを実行している場合は、グーグルに作業を任せて(おそらくサイトマップを追加して)、グーグルカスタム検索を使用してください。

SQLエンジンを使用して中規模のサイトを実行している場合は、SQLエンジンの検索機能を使用してください。

J2EEや.Netなどのより重いソフトウェアスタックを実行する場合は、優れた強力な検索エンジンであるLuceneまたはその.Netクローンlucene.Netを使用してください。

アプリケーションから検索を抽象化し、XML /HTTPおよびJSONAPIを使用して言語に依存しない方法で検索できるようにする場合は、solrを参照してください。Solrはバックグラウンドでluceneを実行しますが、それに優れたWebインターフェースを追加します。

于 2008-08-29T17:42:18.437 に答える
4

xapianomegaフロント エンドを確認することをお勧めします。基本的には、検索機能を構築できるツールキットです。

于 2008-08-29T10:11:51.200 に答える
1

Microsoftプラットフォームを使用している場合は、インデックスサービスを使用できます。これは、IISWebサイトと非常に簡単に統合できます。

全文検索、ランキング、除外、特定のファイルタイプのインクルードなど、すべての基本機能があり、htmlページのメタタグを介して独自のメタ情報を追加することもできます。

グーグルをして、あなたはトンを見つけるでしょう!

于 2008-08-29T17:30:59.743 に答える
1

これにアプローチする最善の方法は、ページの構成方法によって異なります。

それらが多くの異なるレコードから頻繁に構成されている場合 (スタック オーバーフロー ページがそうであると想像します)、データベース側でページを効果的に再構築するために多くの作業を行わない限り、インデックス作成アプローチはより良い結果をもたらす可能性があります。

インデックス作成アプローチの欠点は、ターンアラウンド タイムです。回避策 (Google のサイトマップのようなもの) はありますが、正しく行うのも複雑です。

データベース パスを使用する場合は、最新の検索エンジン システムは、処理するリンク データがあればより適切に機能することにも注意してください。そのため、データベース内の「ページ」間のリンクを理解できるシステムを見つけると、プラスの効果が得られます。

于 2008-08-29T10:16:50.627 に答える
0

これはあなたの質問とは多少直交していますが、RESTful検索のアイデアを強くお勧めします。つまり、実行されたことのない検索を実行するために、Webサイトは/searchs/にクエリをPOSTします。検索を再実行するために、Webサイトは/ searchs /{someid}を取得します

これに関しては、たとえばここに、いくつかの優れたドキュメントがあります。

(とはいえ、最適化であるため、時期尚早である可能性がありますが、可能な場合はインデックス作成が好きです。)

于 2008-08-29T14:59:47.047 に答える
-2

アプリケーションがJavaEEスタックを使用し、 Hibernateを使用している場合は、 Compass Frameworkを使用して、データベースの検索可能なインデックスを維持できます。Compass Frameworkは、内部でLuceneを使用します。

唯一の欠点は、検索インデックスを複製できないことです。したがって、クラスター化データベースを使用してインデックステーブルを保持するか、CompassFramework2.xに追加された新しいグリッドベースのインデックスストレージメカニズムを使用する必要があります。

于 2008-08-29T17:23:23.940 に答える