首页 > 解决方案 > 从 java elasticsearch querybuilder 中删除默认字段

问题描述

Elasticsearch Java 客户端的 QueryBuider 实例正在添加属性,例如
1) order
2) min_doc_count
3) shard_min_doc_count
4) show_term_doc_count_error
5) lang
6) gap_policy

到最后的 Json 查询。没有这些属性,我的查询按预期工作。我想防止这些属性被添加到我的最终查询中。

爪哇:

FilterAggregationBuilder aggregation = AggregationBuilders.filter("id", QueryBuilders.termsQuery("id",
                        "my-name"));
TermsAggregationBuilder lev1Agg = AggregationBuilders.terms("id").field("id");
lev1Agg.size(1);               
lev1Agg.subAggregation(AggregationBuilders.sum("familyMemberCount").field("membersInFamily"));                
lev1Agg.subAggregation(AggregationBuilders.sum("totalKidsInFamily").field("kidsInFamily"));
Map<String, String> bucketsPathsMap = new HashMap<>();
bucketsPathsMap.put("familyMemberCount", "familyMemberCount");
bucketsPathsMap.put("totalKidsInFamily", "totalKidsInFamily");
Script script = new Script("params.familyMemberCount / params.totalKidsInFamily");

BucketScriptPipelineAggregationBuilder bs = PipelineAggregatorBuilders
                        .bucketScript("myScript", bucketsPathsMap, script);

lev1Agg.subAggregation(bs);
aggregation.subAggregation(lev1Agg);
searchSourceBuilder = new SearchSourceBuilder().aggregation(aggregation);
searchSourceBuilder.size(0);

上面代码构建的查询

GET my-alias/_search
{
  "size" : 0,
  "aggregations" : {
    "id" : {
      "filter" : {
        "terms" : {
          "name" : [
            "my-name"
          ],
          "boost" : 1.0
        }
      },
      "aggregations" : {
        "id" : {
          "terms" : {
            "field" : "name",
            "size" : 1,
            "min_doc_count" : 1,
            "shard_min_doc_count" : 0,
            "show_term_doc_count_error" : false,
            "order" : [
              {
                "_count" : "desc"
              },
              {
                "_term" : "asc"
              }
            ]
          },
          "aggregations" : {
            "familyMemberCount" : {
              "sum" : {
                "field" : "membersInFamily"
              }
            },
            "totalKidsInFamily" : {
              "sum" : {
                "field" : "kidsInFamily"
              }
            },
            "myScript" : {
              "bucket_script" : {
                "buckets_path" : {
                  "familyMemberCount" : "familyMemberCount",
                  "totalKidsInFamily" : "totalKidsInFamily"
                },
                "script" : {
                  "source" : "params.familyMemberCount / params.totalKidsInFamily",
                  "lang" : "painless"
                },
                "gap_policy" : "skip"
              }
            }
          }
        }
      }
    }
  }
}

标签: javaelasticsearchquery-builder

解决方案


推荐阅读