私たちのアプリケーションでは、Lucene.Netと協力して、多数のデータにインデックスを付けています。フィールド自体は構成可能であるため、フィールドの名前とタイプは再構築のたびに変更できます。各ドキュメント内に、同じ名前の複数のフィールドと、さまざまな数の数値およびテキストフィールドを含めることができます。現在の開発には多くの労力を費やしているため、別の検索エンジンに変更することはできません。
実は、ほとんどの場合、それは魅力として機能していますが、私たちには回避できないように思われる1つの困難があります。
以下を含むドキュメント「X」にインデックスを付けたいとします。
行A-フィールド1:4 +フィールド2:a
行B-フィールド1:8 +フィールド2:b
作成するインデックスには、次の4つのフィールドが含まれます。
- ドキュメントX:
- フィールド1:4(数値)
- フィールド2:a(テキスト)
- フィールド1:8(数値)
- フィールド2:b(テキスト)
(行IDは重要ではありません)
Field1:[3 TO 6] AND Field2:bを検索すると、このドキュメントがヒットします。
ただし、行で表されるフィールド間のリンク(4と「a」のリンク)はなくなります。
4_aのように値を連結することはできますが、数値検索が失敗し、適切な結果を得るためにどのフィールドが連結されているかをクライアントが知る必要があります。また、アナライザーの難易度も高くなります。各フィールドについて、異なるアナライザーを追加できます(主に言語の目的で)。
また、同じキーを使用して行ごとに個別のドキュメントを作成し、検索結果に個別のドキュメントを追加することもできますが、それは道のりのようには聞こえませんね。これにより、現在作成するドキュメントごとに20〜100のドキュメントを作成するため、ドキュメントの数が大幅に増加します。現在の実装ではこれを簡単に試すことができないため、パフォーマンスや使いやすさについてはテストしていません:-)
Lucene.Net内の特定のフィールド間のリンクを強制する方法を知っている人はいますが、それでも各フィールドを個別に検索する方法を維持していますか?