簡體   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