gpt4 book ai didi

java - 如何使用Java API编写此Elasticsearch查询

转载 作者:行者123 更新时间:2023-12-03 02:20:20 26 4
gpt4 key购买 nike

以下查询正常工作,并返回我需要的结果。我正在努力使用JAVA API编写此代码。

{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "somepath",
"query": {
"bool": {
"filter": [
{
"terms": {
"somepath.key": ["key1", "key2", "key3"]
}
}
]
}
}
}
}
]
}
}
}
我在JAVA中使用它。我想念什么? commaSeparatedKeyString =“key1,key2,key3”
      QueryBuilders.boolQuery().must(QueryBuilders.nestedQuery(
"somepath",
QueryBuilders.boolQuery().filter(QueryBuilders.termsQuery("somepath.key", commaSeparatedKeyString)),
ScoreMode.Total));

最佳答案

出于调试目的,检查正在构建的查询的JSON序列化可能会有所帮助。幸运的是,查询构建器中的toString()方法为您完成了此操作,因此您可以简单地使用System.out.println将查询构建器打印到stdout(或使用日志记录框架对其进行记录)。假设变量commaSeparatedKeyString设置为“key1,key2,key3”(听起来像是,但是您没有告诉我们),您实际上是在创建以下查询:

{
"bool" : {
"must" : [
{
"nested" : {
"query" : {
"bool" : {
"filter" : [
{
"terms" : {
"somepath.key" : [
"key1,key2,key3"
],
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"path" : "somepath",
"ignore_unmapped" : false,
"score_mode" : "sum",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
如您所见,您所需要的查询和正在构建的查询至少有两个相关的区别:
  • 在顶层,您想要的查询以"bool.filter..."开头,但是您正在使用"bool.must..."构建查询:
    QueryBuilders.boolQuery()。 必须(QueryBuilders.nestedQuery(
  • 最里面的词条查询应该有一个词条数组(key1,key2,key3)。您不能简单地用逗号分隔值传递一个字符串来实现这一点,而必须一一传递这些术语:
    termsQuery(“somepath.key”,“key1”,“key2”,“key3”))
  • 关于java - 如何使用Java API编写此Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62543679/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com