繁体   English   中英

为什么我的java elasticsearch请求转换无效?

[英]Why my java elasticsearch request translation is not valid?

我目前正在制作弹性搜索请求来检索一些数据。 我成功地以Json格式编写了正确的请求。 之后我尝试将这个翻译成Java。 但是,当我打印Java发送给ES的请求时,两个请求都不一样,我没有实现这一点。

以下是返回GOOD数据的Json请求:

{
    "query": {
         "filtered": {
             "query": {
                  "match_all": {}
              },
              "filter": {
              "bool": {
                  "must": [
                        { "terms": { "accountId": ["107276450147"] } },
                        {"range" : {
                             "date" : {
                                 "lt" : "1480612801000",
                                 "gte" : "1478020801000"
                         } }
                     }]
                 }
             }
         }
     },
    "size" : 0,
    "aggregations" : {
        "field-aggregation" : {
            "terms" : {
                "field" : "publicationId",
                "size" : 2147483647
            },
            "aggregations" : {
                "top-aggregation" : {
                    "top_hits" : {
                        "size" : 1,
                        "_source" : {
                            "includes" : [ ],
                            "excludes" : [ ]
                        }
                    }
                 }
             }
         }
     }
}

而Java生成的请求...不返回好的数据..

{
    "from" : 0,
    "size" : 10,
    "aggregations" : {
        "field-aggregation" : {
            "terms" : {
                "field" : "publicationId",
                "size" : 2147483647
            },
            "aggregations" : {
                "top-aggregation" : {
                    "top_hits" : {
                        "size" : 1,
                        "_source" : {
                            "includes" : [ ],
                            "excludes" : [ ]
                         }
                     }
                 }
             }
         }
     }
}

最后生成错误的json请求的java代码:

TopHitsBuilder top = AggregationBuilders.topHits("top-aggregation")
        .setFetchSource(true)
        .setSize(1);

    TermsBuilder field = AggregationBuilders.terms("field-aggregation")
        .field(aggFieldName)
        .size(Integer.MAX_VALUE)
        .subAggregation(top);

    BoolFilterBuilder filterBuilder = FilterBuilders.boolFilter()
        .must(FilterBuilders.termsFilter("accountId", Collections.singletonList("107276450147")))
        .must(FilterBuilders.rangeFilter("date").gte(1478020801000L).lte(1480612801000L));

    NativeSearchQueryBuilder query = new NativeSearchQueryBuilder()
        .withQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), filterBuilder))
        .withIndices("metric")
        .withTypes(type)
        .addAggregation(field);

return template.query(query.build());

首先,我必须删除“size”:10和Java生成的“from”......然后我必须添加过滤器。 我做了这个,但它从未添加..你能告诉我的java代码有什么问题以及为什么过滤器没有出现在最终的Json中?

多谢你们。

多谢你们。 我终于解决了这个问题。 java发送了很好的查询,但我在ES java API中看错了地方。 然而,我将请求类型添加到COUNT以避免ES向我发回对我无用的非聚合数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM