11

私は Lucene を初めて使用するので、皆さんの助けを借りたいと思います :)

背景: 現在、SQL Server に保存されているドキュメントがあり、SQL Server でそれらのドキュメントのフルテキスト/タグ検索に Lucene を使用したいと考えています。

Q1) この場合、文書をキーワード検索するには、それらの文書をすべて Lucene インデックスに挿入する必要がありますか? これは、データの重複が発生することを意味しますか (1 つは SQL Server にあり、もう 1 つは Lucene インデックスにありますか?)。膨大な量のドキュメント (約 100 GB) があるため、問題になる可能性があります。それは必然ですか?

Q2) また、各ドキュメントにはタグのセット (最大 3 つ) があります。Lucene もタグ検索に適していますか? もしそうなら、それを行う方法は?

ありがとう、

4

2 に答える 2

9

はい。Lucene による全文検索と、従来のデータベースによるデータ ストレージの提供は、十分にサポートされているアーキテクチャです。 簡単な紹介については、こちらをご覧ください。典型的な実装は、検索をサポートできるようにしたいものすべてにインデックスを付け、一意の識別子のみを Lucene インデックスに格納し、ID に基づいてデータベースから検索によって見つかったレコードをプルすることです。DB の負荷を軽減したい場合は、Lucene にいくつかの情報を保存して検索結果のリストを表示し、完全なドキュメントを取得するためにデータベースにのみクエリを実行できます。

スペースの節約に関しては、ある程度の重複があります。ただし、これは Lucene のみの場合でも当てはまります。Lucene は、保存されたデータとは完全に別個に、検索に使用される転置インデックスを保存します。スペースを節約するために、どのデータをインデックスに登録するか、何を保存して後で取得できるようにするかを慎重に検討することをお勧めします。ほとんどの場合、インデックスのみの値はスペース効率が非常に高い傾向があるため、保存するものは Lucene でスペースを節約するために特に重要です。

Lucene は確かにタグ検索を実装できます。これを実装する簡単な方法は、次のように、ドキュメントを作成するときに、選択したフィールドに各タグを追加することです (「タグ」と呼びますが、これは理にかなっているようです)。

document.add(new Field("tags", "widget", Field.Store.NO, Field.Index.ANALYZED));
document.add(new Field("tags", "forkids", Field.Store.NO, Field.Index.ANALYZED));

また、必要な用語を任意のクエリに追加するだけで、特定のタグ内のみを検索できます。たとえば、「forkids」というタグのみを使用して「some stuff」を検索する場合、次のようなクエリを記述できます。

some stuff +tags:forkids
于 2013-02-27T20:21:53.000 に答える
1

ドキュメントは Lucene に保存することもでき、ドキュメント ID を使用して取得および参照できます。

Lucene の上でSolr http://lucene.apache.org/solr/を使用することをお勧めします。よりユーザーフレンドリーで、デフォルトで (タグ用の) multiValued フィールドを使用できます。

http://wiki.apache.org/solr/SchemaXml

于 2013-02-27T19:17:08.333 に答える