Elasticsearch:如何防止我的客户端自动插入顶级查询 属性
Elasticsearch: how to prevent my client from automatically inserting the top-level query property
我需要生成具有以下结构的查询字符串:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
....
}
}
},
"aggregations": {
"facets": {
"terms": {
"field": "subject"
}
}
}
}
我正在使用以下客户端进行搜索:
Client client = new TransportClient(my_settings_object)
.addTransportAddress(new InetSocketTransportAddress("localhost", "9200"));
SearchResponse sr = client.prepareSearch("my_index")
.setTypes("my_doctype")
.setQuery(query) ; // this is above query string built manually
.execute().actionGet();
return sr;
我收到以下错误:
QueryParsingException[[my_idex] No query registered for [query]]
这个错误好像在这个SO里有解释post:
elasticsearch - No query registered for [query]]
基本上,我的客户端会自动插入顶级查询 属性 使其看起来像:
{
query: {
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
....
}
}
},
"aggregations": {
"facets": {
"terms": {
"field": "subject"
}
}
}
}
}
如何防止我的客户端自动插入顶级查询 属性?
感谢和问候。
如何在 Java 代码中构建 query
对象?
尝试使用 QueryBuilders.filteredQuery(...)
准备它:当您调用 SearchRequestBuilder 的相关 setter 时,结果将被包装在 query
属性中。
使您的查询和聚合查询单个 JSON 对象。将查询更改为:
{
"filtered": {
"query": {
"match_all": {
}
},
"filter": {
....
}
}
}
并更改聚合,使它们位于单独的 JSON 对象中:
{
"facets": {
"terms": {
"field": "subject"
}
}
}
在 SearchRequestBuilder 中设置查询和聚合:
SearchResponse sr = client.prepareSearch("my_index")
.setTypes("my_doctype")
.setQuery(query) ; // this is above query string built manually
.setAggregations(aggregations.getBytes());
.execute().actionGet();
我需要生成具有以下结构的查询字符串:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
....
}
}
},
"aggregations": {
"facets": {
"terms": {
"field": "subject"
}
}
}
}
我正在使用以下客户端进行搜索:
Client client = new TransportClient(my_settings_object)
.addTransportAddress(new InetSocketTransportAddress("localhost", "9200"));
SearchResponse sr = client.prepareSearch("my_index")
.setTypes("my_doctype")
.setQuery(query) ; // this is above query string built manually
.execute().actionGet();
return sr;
我收到以下错误:
QueryParsingException[[my_idex] No query registered for [query]]
这个错误好像在这个SO里有解释post:
elasticsearch - No query registered for [query]]
基本上,我的客户端会自动插入顶级查询 属性 使其看起来像:
{
query: {
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
....
}
}
},
"aggregations": {
"facets": {
"terms": {
"field": "subject"
}
}
}
}
}
如何防止我的客户端自动插入顶级查询 属性?
感谢和问候。
如何在 Java 代码中构建 query
对象?
尝试使用 QueryBuilders.filteredQuery(...)
准备它:当您调用 SearchRequestBuilder 的相关 setter 时,结果将被包装在 query
属性中。
使您的查询和聚合查询单个 JSON 对象。将查询更改为:
{
"filtered": {
"query": {
"match_all": {
}
},
"filter": {
....
}
}
}
并更改聚合,使它们位于单独的 JSON 对象中:
{
"facets": {
"terms": {
"field": "subject"
}
}
}
在 SearchRequestBuilder 中设置查询和聚合:
SearchResponse sr = client.prepareSearch("my_index")
.setTypes("my_doctype")
.setQuery(query) ; // this is above query string built manually
.setAggregations(aggregations.getBytes());
.execute().actionGet();