如何使用JavaHighLevelRestClient在ElasticSearch 6.5.1中运行原始查询?

时间:2019-03-26 10:52:38

标签: java elasticsearch

我想使用JavaHighLevelRestClient在弹性搜索6.5.1版上运行原始查询

GET /my_index/_search
{
  "query": {
    "match": {
      "name": "Neeraj"
    }
  }
}

在带有 PreBuiltTransportClient 的弹性版本中,我们可以使用

SearchResponce searchResponse = client.prepareSearch()
.setQuery("{ "query": { "match": { "name": "Neeraj" } } }").get();

并且RestHighLevelClient没有任何这样的方法prepareSearch,因此 如何使用 RestHighLevelClient 实现相同的目标?

2 个答案:

答案 0 :(得分:0)

文档非常好,包含许多示例: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-search.html

您的情况应该是:

   SearchRequest searchRequest = new SearchRequest("my_index");
    val searchSourceBuilder = new SearchSourceBuilder;
    QueryBuilder query = QueryBuilders.termsQuery("name", "Neeraj");
    searchSourceBuilder.query(query)
    searchRequest.source(searchSourceBuilder)
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

请注意,您也可以将请求写在一行上。

答案 1 :(得分:0)

Elastic Docs中找到了解决方案来实现这一目标,我们可以使用 QueryBuilders的 simpleQueryStringQuery方法来实现这一目标:

 String query = "{ \"query\": { \"match\": { \"name\": \"Neeraj\" } } }";

 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
 searchSourceBuilder.query(QueryBuilders.simpleQueryStringQuery(query));
 searchSourceBuilder.from(0);
 searchSourceBuilder.size(10);

 SearchRequest searchRequest = new SearchRequest();
 searchRequest.indices(indexName);
 searchRequest.source(searchSourceBuilder);


 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
 List<MyRecordDTO> goldenRecords = getSearchResult(searchResponse);

根据文档

/**
 * A query that acts similar to a query_string query, but won't throw
 * exceptions for any weird string syntax. See
 * {@link org.apache.lucene.queryparser.simple.SimpleQueryParser} for the full
 * supported syntax.
 */
public static SimpleQueryStringBuilder simpleQueryStringQuery(String queryString) {
    return new SimpleQueryStringBuilder(queryString);
}