假設我有一個Lucene索引的Customers。每個客戶都有他們訂購的產品。關聯文檔中的多值字段?
比方說,這兩個傢伙代表我的索引兩個文件:
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
鑑於我的指標是客戶爲中心,而不是以訂單爲中心,我的文檔大概是這樣的:
<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>
...
這將最終將所有的價格和產品作爲多值字段並失去其相關聯繫。
我該如何將這項功能應用於我的索引 - 以及如何查詢它 - 以便搜索「每個爲雞肉三明治支付超過12美元的顧客」只會返回John Q. Public?
幾乎所有的查詢都是以客戶爲中心的。因此,將我的索引轉換爲以訂單爲中心最終會給我大量重複的客戶數據。是否有標準的方法來清除重複的客戶?沒有什麼我讀過的(過濾器,收集器,整理)似乎適合... – inanutshellus
如果你不是「存儲」數據(即只使用Lucene索引數據),那麼不要擔心它。複製數據不會有太大的區別。這全是關於術語查詢查詢。試試你的數據樣本,看看索引大小有什麼不同。我懷疑你會發現它太令人擔憂(除非你的磁盤空間很小)。 –
我並不擔心這裏的速度/指數大小,更重要的是當我得到重複的客戶時,該怎麼做。例如,在您的示例中搜索所有「John」會返回4條記錄,而不是2條,我寧願不必將重複數據刪除邏輯交給我的java項目。 – inanutshellus