【问题标题】:ElasticSearch multi field search in non-nested arrays非嵌套数组中的 ElasticSearch 多字段搜索
【发布时间】:2020-12-05 00:12:24
【问题描述】:

考虑一下这个 JSON 内容:

{
  students: [
    {
        student_name: aaa,
        classes: [
        {
            name: class1,
            properties: {
                id: 1
            }
        },
        {
            name: class2,
            properties: {
                id: 2
            }
        }
    },
    {
        student_name: bbb,
        classes: [
        {
            name: class2,
            properties: {
                id: 1
            }
        }
    }
  ]
}

students 没有嵌套。 classes 没有嵌套。我只想通过以下查询匹配 student_name aaa 文档:

{
    "query": {
      "bool": {
         "must": [
         { "term": { "classes.name": "class1" }},
         { "term": { "classes.properties.id": "1" }}
         ]
      }
    }
}

但我的查询同时匹配 aaabbb,因为它将我的术语语句视为单独的查询。我怎样才能匹配学生aaa

【问题讨论】:

  • 在第一部分,为什么[的数量(3)与]的数量(1)不匹配?不应该吗?这似乎不是有效的 JSON。

标签: arrays elasticsearch match


【解决方案1】:

您必须将学生设为nested type。否则它会变平,您的查询将匹配两个文档。

来自相同的 ElasticSearch 文档

当摄取具有大量任意键的键值对时, 您可以考虑将每个键值对建模为自己的嵌套 具有键和值字段的文档。相反,请考虑使用 扁平化数据类型,将整个对象映射为单个字段,并且 允许对其内容进行简单搜索。嵌套文档和 查询通常很昂贵,因此使用扁平数据类型 这个用例是更好的选择。

请参考同一文档中给出的示例,您会很清楚。当student 更改为nested 时,您应该能够得到预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多