【问题标题】:Querying lists in Elasticsearch在 Elasticsearch 中查询列表
【发布时间】:2015-04-03 16:24:24
【问题描述】:

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

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

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

另一个可能有:

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

问题:

1) 如何将文档聚合到其独特的类别中?我将“类别”字段映射为未分析,但是,一个简单的术语聚合会将上面的两个文档组合在“期刊”存储桶中。有没有办法按列表中的位置聚合,或仅聚合列表中特定位置的术语?

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

【问题讨论】:

  • 尝试使用您的架构进行更新,以便我们帮助您进行查询!

标签: elasticsearch


【解决方案1】:

不,你不能。见multivalue fields

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

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

{"categories":"Science Biology Journal"}

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

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

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多