在Elasticsearch中查询列表

时间:2015-04-02 14:20:43

标签: elasticsearch

我在Elasticsearch中有一组文档。每个文档都有一个"类别"字段,它是此文档所属类别名称的最常规到最具体的有序列表。类别层次结构是分类法(每个类别只有一个父类),但类别名称重叠。从根开始的完整类别链是识别文档所在类别的唯一可靠方法。

例如,一个文档可以有一个类别字段:

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

另一个可能有:

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

问题:

1)如何将文档汇总到其独特的类别中?我有"类别"字段映射为未分析,但仍然,一个简单的术语聚合将上面的两个文档一起分组在" Journal"桶。有没有办法按列表中的位置聚合,或只聚合列表中特定位置的术语?

2)给定一个唯一的类别,如其路径所标识,如何过滤该类别中的文档?有没有办法根据列表中的位置进行过滤?

1 个答案:

答案 0 :(得分:2)

不,你不能。见multivalue fields

  

但是,数组是可索引的可搜索的 - 作为无数字段的多值字段。在搜索时,您不能引用“第一个元素”或“最后一个元素”。相反,将数组视为一组值。

你可以做的是,使用嵌套对象,或者更简单的是在一个字段中写下路径,并对其进行索引分析而不进行分析。

{"categories":"Science Biology Journal"}

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

  • 术语(未分析):如果您想要确切的路径
  • 字符串查询:如果您想要一个或多个类别
  • ...