2012-09-14 58 views
2

我正嘗試在多個文檔類型中設置搜索,每個文檔類型都有不同的字段集合。因此,搜索始終應該始終以最普通的方面字段(例如產品類別)開始,這對所有文檔類型都是通用的。Apache Solr中的方面字段(不是層次方面)的層次結構?

PRODUCT CATEGORY 
- Camera (42) 
- TV & Video (96) 
- MP3 Player (11) 
- Video Game (63) 

選擇「攝像頭」之後,我需要啓用了一整套新的小領域,專用於該文件類型(例如品牌,容量),如下所示:

PRODUCT CATEGORY 
> Camera 

BRAND 
- Canon (42) 
- Nikon (96) 
- Sony (11) 
- Samsung (63) 

CAPACITY 
- 1Gb (42) 
- 2Gb (96) 
- 3Gb (11) 
- 4Gb (63) 

我知道這可以通過以編程方式管理facet.field查詢參數來完成,但有沒有更好的方法來構建系統?是否有任何功能或技巧來允許Solr及其字段結構中的此方面字段依賴性?

非常感謝!

編輯:我改變了標題從「依賴性方面領域」。

回答

0

我認爲你可以確保你的索引中的每個文檔此時,相應的信息做到這一點,看看this wiki page on hierarchical facetting

+0

是的,我確實讀過它,確實有一個層次結構,但沒有方面。這是關於字段之間的層次結構。在我的例子中,它有點像**品牌**和**容量**是**產品類別**的「子」字段,這樣在父字段上進行過濾就會自動在兒童字段中進行切面。 – brutus

+0

如何添加像0/Canon,1/Canon/4Gb等值的字段? – Persimmonium

+0

有趣的是,你的意思是將3個字段組合在一起,因爲級別是單個分層字段?這不是太嚴格嗎?在我的情況下,1字段可以使2個其他(或更多),但是你的建議不會導致嚴格單個孩子?我將如何保持單獨的字段顯示,就像我在灰色框中顯示的那樣? – brutus

2

IMO你不需要創建任何依賴。
您可以爲此條目創建單個字段。

當您執行初始查詢時,您將面向產品類型。
然後,當您對特定產品類型進行過濾時,您只會根據過濾器的結果獲取方面。

例如, 產品型號相機會對品牌佳能,尼康的等等......一些容量選擇 產品型號電視&視頻會對品牌歌,作爲三星等等......與其他一些屬性

所以,當你將在相機上過濾(fq=product_type:Camera),您將限制結果僅適用於具有容量選項的此過濾器中的產品類型相機和品牌。
過濾應該處理依賴關係。

+0

是的,''intern查詢''field.facet',和'fq'在它的facet鏈接?這似乎是一個好主意,只有在這個「領域層次」的兩個層面上(1-產品類別/ 2-品牌,容量)。但是沒有真正的現場依賴,會有更多的層次,是不是? – brutus

+0

我想如果他想強制選擇方面的順序,他必須使用一些層次結構,因爲即使他只想要品牌和容量,用戶也可以過濾價格(fq = product_type:Camera)可用 – Persimmonium

+0

你是對的,那個「一些層次結構」是我正在尋找的:一個字段層次結構(我甚至會重寫標題)。由於似乎沒有這樣的功能,它是自定義代碼的唯一出路嗎? – brutus