[英]How to create a query with query_string using Elasticsearch Java Api
[英]ElasticSearch 2.0 Java API aggregate filter with query_string
在通過Java API連接的ElasticSearch 2.0上運行。 我已經通過REST API使用了以下查詢,但無法弄清楚如何使用Java API來執行此查詢。
{
"query": {
"query_string": {
"query": "myfield:*"
}
},
"aggs" : {
"foo_low": {
"filter" : {
"query" : {
"query_string" : {
"query": "myfield:[1 TO 5]"
}
}
}
},
"foo_high": {
"filter" : {
"query" : {
"query_string" : {
"query": "myfield:[6 TO 10]"
}
}
}
}
}
}
我有一個看看使用的例子addAggregation
方法,但不知道如何在通過query_string
部分。
作為背景,最初使用的是Solr,所以有多個Solr方面查詢需要轉換為ElasticSearch。 方面查詢比示例中顯示的要復雜一些,在每個Solr方面查詢中都引用了多個字段和條件,這就是為什么我想將Lucene查詢與query_string
一起使用。
任何想法深表感謝! 謝謝。
因為它看起來像myfield
是一個整場,您可以使用range
過濾器,而不是一個的query_string
這是更預期的文本匹配。 由於您有兩個感興趣的范圍,因此我建議使用range
聚合 ,它允許您定義多個范圍存儲桶(請注意, to
參數不包含在范圍內)。 您的查詢將如下所示:
{
"query": {
"query_string": {
"query": "myfield:*"
}
},
"aggs": {
"high_low": {
"range": {
"field": "myfield",
"keyed": true,
"ranges": [
{
"key": "foo_low",
"from": 1,
"to": 6
},
{
"key": "foo_high",
"from": 6,
"to": 11
}
]
}
}
}
}
轉換成Java代碼后,它是這樣的:
// 1. bootstrap the query
SearchRequestBuilder search = node.client().prepareSearch()
.setSize(0).setFrom(0)
.setQuery(QueryBuilders.queryStringQuery("myfield:*"));
// 2. create the range aggregation
RangeBuilder rangeAgg = AggregationBuilders.range("high_low").field("myfield");
rangeAgg.addRange("foo_low", 1, 6);
rangeAgg.addRange("foo_high", 6, 11);
search.addAggregation(rangeAgg);
// 3. execute the query
SearchResponse response = search.execute().actionGet();
**更新**
根據要求,以下是Java代碼,它將生成您發布的確切查詢:
// 1. bootstrap the query
SearchRequestBuilder search = node.client().prepareSearch()
.setSize(0).setFrom(0)
.setQuery(QueryBuilders.queryStringQuery("myfield:*"));
// 2. create the filter aggregations
FilterAggregationBuilder lowAgg = AggregationBuilders
.filter("foo_low")
.filter(QueryBuilders.queryStringQuery("myfield:[1 TO 5]"));
search.addAggregation(lowAgg);
FilterAggregationBuilder highAgg = AggregationBuilders
.filter("foo_high")
.filter(QueryBuilders.queryStringQuery("myfield:[6 TO 10]"));
search.addAggregation(highAgg);
// 3. execute the query
SearchResponse response = search.execute().actionGet();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.