使用elasticsearch java api客户端创建TermsQuery with List<String>

问题描述 投票:0回答:2

我有一个弹性搜索查询,如下所示。

{
   "query":{
      "bool":{
         "filter":{
            "bool":{
               "must_not":{
                  "terms":{
                     "names":[
                        "john",
                        "jose"
                     ]
                  }
               }
            }
         }
      }
   }
}

我正在尝试在与查询相对应的代码中构建类似的东西。

BoolQuery.Builder builder = new BoolQueryBuilder();
List<String> names = ["john","jose"];
TermsQueryField field = new TermsQueryBuilder().value(names).build();
builder.mustNot(TermsQuery.of(t -> t.field("names").terms(field))._toQuery());

但是我在这一行中遇到错误,因为它期望值函数内的 FieldValue 列表而不是字符串列表。

TermsQueryField field = new TermsQueryBuilder().value(names).build();

有人可以帮忙吗?

java elasticsearch builder apiclient
2个回答
1
投票

您需要使用以下代码为您的

fieldValues
创建
names

List<FieldValue> fieldValues = names.stream().map(FieldValue::of).toList();

0
投票

您还可以执行以下操作:

new TermsQueryField(names.Select(name => FieldValue.String(name)).ToList())

© www.soinside.com 2019 - 2024. All rights reserved.