简体   繁体   English

ElasticSearch Java API - 查询生成器

[英]ElasticSearch Java API - Query Builder

I'm currently working on elasticsearch where I've created a query:我目前正在研究 elasticsearch ,在那里我创建了一个查询:

  "query": {
    "bool": {
      "must": [
        {"match": {
          "companyId": 35
        }},
        {
          "multi_match": {
            "query": "movie",
            "fields": ["name", "description"]
          }
        }
      ]
    }
  }
}

For which I have build QueryBuilder in JAVA:为此,我在 JAVA 中构建了 QueryBuilder:

        SearchRequest searchRequest = new SearchRequest("faqs");//index name
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
                
        QueryBuilder mulMatch = QueryBuilders.multiMatchQuery(name,"name", "description").type("phrase").boost(5);
        QueryBuilder cId = QueryBuilders.matchQuery("companyId", companyId).boost(5);
        QueryBuilder must = QueryBuilders.boolQuery().must(cId).must(mulMatch).boost(5);
        
        searchSourceBuilder.query(must);
        searchRequest.source(searchSourceBuilder);
        System.out.println("SS Query : " + searchSourceBuilder);

        return searchSourceBuilder;

which gives me query created as:这给了我创建的查询:

{"query":{"bool":{"must":[{"match":{"companyId":{"query":35,"operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":5.0}}},{"multi_match":{"query":"movie","fields":["description^1.0","name^1.0"],"type":"phrase","operator":"OR","slop":0,"prefix_length":0,"max_expansions":50,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":5.0}}],"adjust_pure_negative":true,"boost":5.0}}}

However, I require output such as:但是,我需要 output 例如:

{
          "Id": 1,
          "name": "Controle",
          "description": "Welcome movie",
          "visibility": "2",
          "isarticleEnabled": false,
          "companyId": 35,
          "categoryId": 0        
}

Though I'm getting output as(API Response):虽然我得到 output 作为(API 响应):

{
    "suggestOnly": false,
    "fragment": false
}

So to get such a response, what should I exactly do?那么要得到这样的回应,我究竟应该怎么做呢? One solution I've got is of using Search Response such as:我得到的一种解决方案是使用搜索响应,例如:

SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);

But still, this is not actually working with ElasticsearchRestTemplate and RestHighLevelClient.但是,这实际上并不适用于 ElasticsearchRestTemplate 和 RestHighLevelClient。

Note: I've searched for all the relative solutions, ie Search Request, Search Response, but I was unable to get any of the proper solutions.注意:我已经搜索了所有相关的解决方案,即搜索请求、搜索响应,但我无法获得任何合适的解决方案。

Maybe they should be merged instead of overriding.也许它们应该被合并而不是覆盖。 searchSourceBuilder.query(QueryBuilders.boolQuery().filter(mulMatch).filter(cId).filter(must));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM