ElasticSearch,运算符,嵌套字段

eyh26e7m  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(387)

我有一个文档,比如{“name”:“”,“age”:“20”,“attributes”:[{“city”:“new york”},{“city”:“new jersey”}]}
如果我用york jersey搜索,我希望查询不返回任何记录。我用了“和”运算符,它不起作用,因为我在同一个字段上搜索,而不是多个字段,因为约克和泽西岛都在这两个地方,它给了我2个记录,有什么想法吗?我也读过关于嵌套字段的文章,但是它需要重新索引数据,所以有没有不重新索引数据的解决方案?

aij0ehis

aij0ehis1#

对象数组并不像您预期的那样工作:您不能独立于数组中的其他对象来查询每个对象。如果需要这样做,那么应该使用嵌套数据类型而不是对象数据类型。
请参阅本es关于阵列的官方文件以获得详细解释,请参阅本so答案。
添加索引数据、Map、搜索查询和搜索结果的工作示例
在应用嵌套数据类型之后,必须重新索引数据
索引Map:

{
  "mappings":{
    "properties":{
      "attributes":{
        "type":"nested"
      }
    }
  }
}

索引数据:

{
  "name": "abc",
  "age": "20",
  "attributes": [
    {
      "city": "NEW YORK"
    },
    {
      "city": "NEW JERSEY"
    }
  ]
}

搜索查询:

{
    "query": {
        "nested": {
            "path": "attributes",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "attributes.city": "YORK"
                            }
                        },
                        {
                            "match": {
                                "attributes.city": "JERSEY"
                            }
                        }
                    ]
                }
            },
            "inner_hits": {}
        }
    }
}

搜索结果:
不返回结果

相关问题