我想使用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 实现相同的目标?
答案 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); }