2015-10-20 85 views
0

我有存儲在我的solr數據庫中的產品信息。產品可以是多個類別的一部分。商店類別信息在Solr

現在,我想在屬於這些類別的產品中存儲有關這些類別的信息。 (是否有其他方式?)

所以,說一個產品A屬於類別C1和C2與ids I1和I2。現在我如何在產品A中存儲I1到C1的映射?這樣做的模式應該是什麼?但是,如果簡單地存儲id,名稱和其他一些數據(比如url)的列表,則每個id到名稱或url的映射將會丟失。像這樣:

<field name="category_ids" type="tints" indexed="true" stored="true"/> 
<field name="category_names" type="strings" indexed="true" stored="true"/> 

那麼應該如何存儲文件?

+0

實際上,一個更好的問題是如何去搜索這些文檔,然後設計索引。 –

+0

搜索仍可能發生在與映射關聯的ID /名稱列表中。 但是現在不需要添加任何新字段,因爲多值字段中的添加順序將被保留。這將自動將ID映射到各個領域的信息。 –

回答

1

您描述的方式工作 - Solr將保持字段之間的順序相同,因此您可以假定字段category_ids中的第一個值與字段category_names中的第一個值相對應。我們用它來索引幾個多值域中更復雜的對象。

第二種解決方案是使用類別id在中間件中查找實際的類別信息,查詢數據庫中的相關信息。這樣可以避免如果名稱更改(如果您使用名稱進行查詢,無論選擇何種解決方案,都需要重新進行索引),則必須重新索引類別的所有文檔。

第三種解決方案是將一個字段同時包含id,名稱以序列化形式存在,如3;Laptops或JSON,只存儲字段而不索引它(並使用索引的非存儲字段實際搜索)。

你也可以使用兒童文件來做這樣的事情,但是我個人認爲它會給你帶來相當多的不必要的複雜性。

+0

訂單是否總是有保證?你能指出我的一些solr文檔說明這一點嗎? 是的,我雖然使用兒童文件,但放棄它,因爲它會使系統不必要的複雜。如果必須這樣做,那麼它可以在中間件處理得更好。 –

+0

是的,訂單是有保證的。自2008年IIRC以來,我們一直在進行這項工作。我能找到的最好的是[這封郵件主題](https://www.mail-archive.com/[email protected]/msg74780.html)。 – MatsLindh

+0

很酷。這將簡化很多事情。謝謝 :) –