首页 > 解决方案 > 在这种情况下,如何在 elasticsearch 7.x 中使用术语查询

问题描述

弹性搜索版本是 7.x

这里有一些嵌套数据打击:

data1:
[{name:"tom"},{name:"jack"}]

data2:
[{name:"tom"},{name:"rose"}]

data3:
[{name:"tom"},{name:"rose3"}]
...

dataN:
[{name:"tom"},{name:"roseN"}]

当我使用术语查询时,我只想搜索 tom, jack, 但不想包括 rose...roseN

query:{
terms:{["tom","jack"]}
}
this code is not effective

标签: javaelasticsearch

解决方案


添加一个工作示例

指数数据:

PUT /_doc/1
{
  "names": [
    {
      "name": "tom"
    },
    {
      "name": "jack"
    }
  ]
}

PUT /_doc/2
{
  "names": [
    {
      "name": "tom"
    },
    {
      "name": "rose"
    }
  ]
}

搜索查询:

    {
  "query": {
    "bool": {
      "must": {
        "terms": {
          "names.name": [
            "tom",
            "jack"
          ]
        }
      },
      "must_not": {
        "match": {
          "names.name": "rose"
        }
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65838516",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "names": [
            {
              "name": "tom"
            },
            {
              "name": "jack"
            }
          ]
        }
      }
    ]

推荐阅读