私は顧客のLuceneインデックスを持っているとします。各顧客には、注文した製品があります。ドキュメント内の複数値フィールドを関連付ける?
のは、これら2つのfellasが私のインデックスに2つの文書を表すとしましょう:
<add>
<doc>
<field name="Name">John Smith</field>
<field name="Product">Chicken Sandwich</field>
<field name="Price">10</field>
<field name="Product">Dodge Challenger</field>
<field name="Price">35000</field>
</doc>
<doc>
<field name="Name">John Q. Public</field>
...
:私のインデックスは顧客中心ではなく、順番中心であることを考えると
Name: John Smith
Product: Chicken Sandwich, Price: $10
Product: Dodge Challenger, Price: $35000
Name: John Q. Public
Product: Chicken Sandwich, Price: $15
Product: Audi TT, Price: $35000
を、マイドキュメントは、おそらくこのようになります。
価格と商品のすべてを多値フィールドとしてまとめ、相対的な関連性を失うことになります。
"私はチキンサンドウィッチを12ドル以上支払ったすべての顧客"を検索すると、John Q. Publicのみが返されるように、これを私のインデックスにどのようにして取得できますか?
私の質問のほとんどは顧客中心です。そのため、インデックスを注文中心に変換すると、大量の顧客データが複製されることになります。重複顧客を淘汰する標準的な方法はありますか?私が読んだことの何も(フィルター、コレクター、照合)は適合しているようです... – inanutshellus
データを保存していない場合(つまり、Luceneを使用してデータをインデックスに登録していない場合)、心配しないでください。データを複製することで大きな違いはありません。それはすべて、用語クエリの検索についてです。あなたのデータのサンプルでそれを試し、インデックスのサイズの違いが何であるかを見てください。私はあなたがあまりにも心配しているとは思わないでしょう(あなたがディスク容量が非常に少ない場合を除きます)。 –
ここでスピード/インデックスのサイズは心配していません。たとえば、あなたの例ではすべての "John"を検索すると2つではなく4つのレコードが返されますが、私はその重複しないロジックをJavaプロジェクトに渡す必要はありません。 – inanutshellus