1

SO やその他の場所で、「Lucene でリレーショナル データにインデックスを付けて検索するにはどうすればよいですか」という質問をする複数の質問を見つけました。これらの質問に対して、Lucene はこのようなデータをモデル化するように設計されていないという標準的な回答で満たされるのは当然のことです。私が見つけたこの引用はそれを要約しています…</p>

Lucene インデックスはドキュメント ストアです。ドキュメント ストアでは、1 つのドキュメントが 1 つの概念を表し、その概念を表すために必要なすべてのデータが格納されています (同じ概念が RDBMS の複数のテーブルにまたがっており、再作成するためにいくつかの結合が必要であるのとは対照的です)。

そのため、私はその質問をせず、代わりに私の高レベルの要件を提供し、そこにいる Lucene の達人が私を助けることができるかどうかを確認します.

  • 人に関するデータがあります(名前、性別、生年月日、国籍など)
  • 企業に関するデータ (名前、国、都市など)。
  • また、これら 2 つのタイプのエンティティが、会社で働いていた場所でどのように相互に関連しているかについてのデータもあります (個人、会社、役割、開始日、終了日など)。

Person と Company の 2 つのエンティティがあり、それぞれに独自のプロパティがあり、それらの間の多対多リンク用のプロパティが存在します。

いくつかの検索例は次のようになります…

  • オーストラリアのすべての企業を検索
  • 2 つの日付の間に生まれたすべての人を検索する
  • .Net 開発者として働いたことのある人をすべて検索
  • ロンドンで .Net 開発者として働いたことのあるすべての男性を検索します。
  • 2008 年から 2010 年の間に .Net 開発者として働いたすべての人を検索します。

基準は、3 つのデータ セットすべてにまたがっています。私たちの要件は、いくつかの例を示したさまざまなプロパティの任意の組み合わせを受け入れるデータに対してファセット検索を提供することです。

これにはLucene.Netを使用したいと思います。私たちは .Net ソフトウェア ハウスなので、Java には少し戸惑っています。ただし、すべての提案を歓迎します。

検索を念頭に置いてインデックスを構築する必要があるという考えは承知しています。しかし、検索条件のすべての組み合わせを満たす賢明なインデックスを思い付くことができないようです

  • Lucene のネイティブ クラス、または利用できる拡張ポイント。
  • この種のことを行うための確立された技術はありますか?
  • ここで役立つ、私が見逃した 3 つ目のオープン ソースの貢献はありますか?

今のところ、検討したシナリオについては説明しません。この質問を膨らませて、あまりにも威圧的にしたくないからです。必要に応じて詳しく説明してください。

4

1 に答える 1

2

type会社と人の両方を単一のインデックスに格納するために、それらが記述するエンティティのタイプを識別するフィールドを持つドキュメントを作成できます。

誕生日は日付フィールドとして保存できます。

あなたは各人に彼らが働いていた会社の名前を含む簡単なテキストフィールドを与えることができます。インデックスにドキュメントで表されていない会社を入力しても、エラーは発生しないことに注意してください。LuceneはリレーショナルDBツールではありませんが、あなたはそれを知っていました。

(APIへのリンクを投稿していないことをお詫びします。私はLucene Coreに精通していますが、Lucene.NETには精通していません。)

于 2011-12-13T15:39:51.800 に答える