Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中转换嵌套的弹性搜索查询?_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elastic Stack_Resthighlevelclient - Fatal编程技术网 elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient" /> elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient" />

如何在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

下面的查询将对如何将其转换为java代码进行过滤和聚合。查询从postman开始工作,同样需要使用java客户端api将其转换为java。我使用rest高级客户端作为弹性搜索客户端。我尝试了下面的java代码,但生成的查询与实际的有点不同,下面是我尝试过的java代码

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);