elasticsearch java查询匹配我的任何列表

问题描述 投票:1回答:1

我正在尝试使用java构建一个查询,该查询按列表过滤所有命中。假设我有一个不同名称的列表,现在我想构建一个查询,它返回列表中存储的名称的所有元素。由于此列表中将有100多个名称,我只想将整个列表传递给我的查询。

首先,我尝试在elasticsearch head插件中构建一个原始查询,以便我更容易将其实现到java中。

目前我的原始查询如下所示:

{
"query": {
   "bool": {
      "filter": {
          "term": {
             "name": {
                "value": [
                   "name1",
                   "name2"
                ]
              }
           }
         }
      }
   }
}

我知道我至少有一个名为“name1”的元素,“name2”相同。但是这个查询不会返回任何内容。我究竟做错了什么?

谢谢,Asiemie

java list elasticsearch filter
1个回答
1
投票

term查询不支持值数组。但是,terms可以这样做,你可以做到以下几点:

{
"query": {
   "bool": {
      "filter": {
          "terms": {
             "name": [
                   "name1",
                   "name2"
                ]
           }
         }
      }
   }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

您还可以将术语查询包装到bool - > should查询中,如下所示:

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "should": [
            {
              "term": {
                "name": "name1"
              }
            },
            {
              "term": {
                "name": "name2"
              }
            }
          ]
        }
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.