![](/img/trans.png)
[英]Why my elasticsearch failed to build transportclient in JAVA API?
[英]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.