如何在java中转换嵌套的弹性搜索查询?
下面的查询将对如何将其转换为java代码进行过滤和聚合。查询从postman开始工作,同样需要使用java客户端api将其转换为java。我使用rest高级客户端作为弹性搜索客户端。我尝试了下面的java代码,但生成的查询与实际的有点不同,下面是我尝试过的java代码如何在java中转换嵌套的弹性搜索查询?,java,elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient,下面的查询将对如何将其转换为java代码进行过滤和聚合。查询从postman开始工作,同样需要使用java客户端api将其转换为java。我使用rest高级客户端作为弹性搜索客户端。我尝试了下面的java代码,但生成的查询与实际的有点不同,下面是我尝试过的java代码 BoolQueryBuilder booleanQuery = QueryBuilders.boolQuery(); booleanQuery.filter(QueryBuilders .queryStringQu
BoolQueryBuilder booleanQuery = QueryBuilders.boolQuery();
booleanQuery.filter(QueryBuilders
.queryStringQuery(String.join(" OR ", exactMatchThese))
.field("events.recommendationData.exceptionId"));
QueryBuilder queryBuilder = QueryBuilders.nestedQuery("events.recommendationData", booleanQuery, ScoreMode.None);
搜索正在工作的查询
GET <index-name>/_search
{
"query": {
"bool": {
"filter": [
{
"nested": { --> note
"path": "events.recommendationData",
"query": {
"query_string": {
"query": "\"1\" OR \"2\"",
"fields": [
"events.recommendationData.exceptionId"
],
"type": "best_fields",
"default_operator": "or",
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1
}
}
}
}
]
}
},
"size": 1,
"aggs": {
"genres": {
"nested": {
"path": "events.recommendationData.recommendations"
},
"aggs": {
"nested_comments_recomms": {
"terms": {
"field": "events.recommendationData.recommendations.recommendationType"
}
}
}
}
}
}
最内部的查询块是查询字符串,即
QueryStringQueryBuilder queryString = QueryBuilders
.queryStringQuery(String.join(" OR ", exactMatchThese));
这是嵌套查询的查询部分,因此我们创建了一个嵌套查询,并将上面的查询分配给它,如下所示
NestedQueryBuilder nestedQuery = QueryBuilders
.nestedQuery("events.recommendationData", queryString, ScoreMode.None);
最后将上述查询添加到bool query的filter子句中
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().filter(nestedQuery);
总的来看,
QueryStringQueryBuilder queryString = QueryBuilders
.queryStringQuery(String.join(" OR ", exactMatchThese));
NestedQueryBuilder nestedQuery = QueryBuilders
.nestedQuery("events.recommendationData", queryString, ScoreMode.None);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().filter(nestedQuery);
QueryStringQueryBuilder queryString = QueryBuilders
.queryStringQuery(String.join(" OR ", exactMatchThese));
NestedQueryBuilder nestedQuery = QueryBuilders
.nestedQuery("events.recommendationData", queryString, ScoreMode.None);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().filter(nestedQuery);