2015-04-02 59 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"} 

现在您可以使用一系列过滤器和查询来搜索它。例如:

  • 期限(不分析):如果你想要的确切路径
  • 查询字符串:如果你想要一个或多个类别
  • ...