2011-10-13 68 views
0

我正在尋找一些關於如何正確設計索引文件以適合我的情況的模式的幫助和智慧。基本上我有可以屬於多個類別的產品。在這些類別中,這些產品可以或不可以被排序。理想情況下,我想每個產品只保留一個獨特的文檔。如何過濾/排序Solr中的多個類別中排序的文檔而不進行分組?

我使用Solr的3.4.0,目前具有這種結構的文檔:

{ 
    productId : "1", 
    sku : "ABC123", 
    productName : "My Product", 
    categorySequence : ["123-1", "456-7", "789-noseq", "000-noseq"], 
    description : "Product description", 
    rating: "4.36" 
} 

的categorySequence就是我在遇到麻煩。這是一個多值字段,其中包含使用分類ID格式化的字符串,以及在該分類標識中用短劃線分隔的產品序列。如果產品未按照我隨意附加的「noseq」進行排序。

因爲我的產品可以在多個類別的存在,我做了categorySequence領域的過濾器這樣的查詢:

fq=categorySequence:123-* 

這是爲我工作帶回僅是與ID類產品「123」。

但是現在我發現的問題是,你不能在多值字段上排序。我最初希望這將是一種快速的方式,以適當的順序對過濾後的產品進行分類。

我在這裏看到關於分組和爲同一產品提供多個文檔的其他建議。但是,我的產品可以存在很多類別,並且您可以想象會創建大量文檔。

我希望堅持代表單個產品的單一文檔。有人能幫助我指出正確的方向嗎?我想我基本上是在做一個過濾器和排序在二維領域?

回答

1

面臨着類似的問題,這裏是我們實現 -

  1. 涉及的產品ID和排序順序每個產品創建充滿活力的領域。

場 -

<dynamicField name="*_sort_seq" type="string" indexed="true" stored="false" sortMissingLast="true"/> 

數據反饋到Solr -

123_sort_seq=1 
456_sort_seq=7 
  1. 不需要存儲那些沒有任何排序順序。這些位置可以通過sortMissingLast & sortMissingFirst屬性來處理。

  2. 這些字段將保留類別的產品位置/序列。

  3. 正如您所知的類別ID,您可以輕鬆篩選和分類產品。

    FQ = categorySequence:123- * &排序= 123_sort_seq ASC

  4. 不需要維護產品的多個副本。

+0

這絕對是更簡潔的方式去,謝謝你的這種做法! – Ghosty

相關問題