24

Lucene を使用して「書籍検索」API を構築しています。Lucene インデックスの Book Name、Author、および Book category フィールドにインデックスを付ける必要があります。

1 つの本が複数の異なる本のカテゴリに分類される場合があります。たとえば、次のようになります。

BookName1 --フィクション、ユーモア、哲学。BookName1 --フィクション、サイエンス。BookName1 -- ユーモア、ビジネス。BookName4-ユーモアなど……。

ユーザーは、「ホモ」などの特定のカテゴリにあるすべての本を検索できる必要があります。

この状況を考えると、どのようにフィールドの上にインデックスを作成し、lucene でクエリを作成するのですか?

4

3 に答える 3

32

Luceneドキュメントのフィールドを複数回出現させることができます。ドキュメントを作成し、名前と作成者の値を追加してから、各カテゴリに対して同じことを行います

  • 新しいluceneドキュメントを作成する
  • 名前フィールドと値を追加
  • 著者フィールドと値を追加します
  • カテゴリごとに:
    • カテゴリフィールドと値を追加します
  • インデックスにドキュメントを追加

インデックスでカテゴリを検索すると、目的の値を持つカテゴリフィールドを持つすべてのドキュメントが返されます。カテゴリは「キーワード」フィールドである必要があります。

特定のコードがluceneバージョンごとにわずかに異なるため、英語で記述しました。

于 2009-01-05T10:25:00.053 に答える
5

スペースで区切られた本のすべてのカテゴリをリストする単純な「カテゴリ」フィールドを作成できます。

次に、次のようなものを検索できます。

stock market AND category:(+"business")

または、複数のカテゴリで検索したい場合

stock market AND category:(+"business" +"philosophy")
于 2008-12-31T09:52:16.483 に答える
4

代わりにSolrを使用します。これは Lucene 上に構築され、ASF によって管理されていますが、特に新規参入者にとっては、Lucene よりもはるかに使いやすいです。

Lucene のほとんどすべてのメインライン機能 (説明したプロジェクトに必要なすべてのもの) に加えて、スナップショット、レプリケーション、スキーマなどの追加機能を提供する場合...

Solr では、インデックスを作成するフィールドを次のように定義するだけですschema.xml

<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued='false'/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued='false' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued='true' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued='true' />

このmultiValued='true'属性を使用すると、このフィールドに配列またはリストを効果的に渡すことができ、Solr によって適切に分割およびインデックス付けされることに注意してください。

これができたら、Solr を起動すると、" book_authors:Hemingway" や " " などのクエリを実行できますbook_categories:Romance book_categories:Mills

複雑なクエリ (あいまい一致、ブール演算、スコアリング ブーストなど) の解析などを実行するために、いくつかのクエリ ハンドラーが事前に作成および構成されています。また、Solr の API は HTTP 経由で公開されているため、これらはすべて数値でラップされます。そのため、クエリを作成するための低レベルの詳細を自分で処理する必要はありません。

彼らのウェブサイトには、始めるための優れた ドキュメントがたくさんあります。

于 2008-12-31T01:35:03.897 に答える