2015-04-02 65 views
2

我在Elasticsearch中有一個文檔集合。每個文檔都有一個「類別」字段,該字段是從最一般的到最具體的本文檔所屬類別名稱的有序列表。類別層次結構是一個分類法(每個類別只有一個父類),但名稱的類別重疊。全品類鏈,從根本上,是唯一可靠的方法來識別一個文檔在類別在Elasticsearch查詢列表

例如,一個文檔可以有一個類別字段:

["Science", "Biology", "Journal"] 

而另一個可以有:

["Science", "Astronomy", "Journal"] 

的問題:

1)我怎樣才能聚集文件導入其獨特的類別?我將「類別」字段映射爲未分析,但仍然是一個簡單的術語聚合,將上述兩個文檔歸入「日誌」存儲分組中。有沒有一種方法可以按列表中的位置進行聚合,或僅聚合列表中特定位置的條款?

2)給定一個獨特的類別,如其路徑所示,如何過濾類別中的文檔?有沒有辦法根據列表中的位置進行過濾?

+0

嘗試更新您的模式,所以我們可以幫助您查詢! – eliasah 2015-04-02 14:51:36

回答

2

不,你不能。請參閱multivalue fields

但是,數組是索引編制的可搜索的 - 作爲無序的多值字段。在搜索時,您不能引用「第一個元素」或「最後一個元素」。相反,將數組視爲一組值。

你可以做什麼,是使用嵌套對象,還是更簡單,只需在一個字段中寫下路徑,並對其進行分析和分析即可。

{"categories":"Science Biology Journal"} 

現在您可以使用一系列過濾器和查詢來搜索它。例如:

  • 期限(不分析):如果你想要的確切路徑
  • 查詢字符串:如果你想要一個或多個類別
  • ...