Elasticsearch客户端新版本8.1如何请求搜索

nmpmafwu  于 2023-01-12  发布在  ElasticSearch
关注(0)|答案(1)|浏览(173)

只是在新的弹性版本8.1中挣扎,因为不知道如何将简单的搜索迁移到新的API中:
老办法:

...    
final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchQuery("name", "Paul"));

final SearchRequest searchRequest = new SearchRequest("/myIndex");
searchRequest.searchType(SearchType.DEFAULT).source(searchSourceBuilder);
final SearchResponse sr = client.search(searchRequest, RequestOptions.DEFAULT);
...

这是直接向前的。可以从响应中找出命中率等,一切正常。
但是使用新的方法,我无法像以前那样处理searchrequest:

final SearchResponse<TDocument> sr1 = client.search(searchRequest, Class<TDocument> tDocumentClass);

需要什么样的TDocument类型,以及如何定义适合API的模型?

kr98yfug

kr98yfug1#

在深入学习了一些教程之后,我终于找到了一个简单问题的解决方案。参见:

final Query query = new Query.Builder().term(t -> t.field("field_looking_for").value(v -> v.stringValue("value_looking_for"))).build();
    final Query bool_query = new Query.Builder().bool(t -> t.must(query)).build();

    try {
        final SearchResponse<ChannelDto> result = client.search(s -> s.query(bool_query).index(INDEX).size(100), Dto.class);
        if (!result.hits().hits().isEmpty()) {
            for (final Hit<Dto> data_result : result.hits().hits()) {
                Dto dto = data_result.source();
                return dto;
            }
        }
    } catch (ElasticsearchException | IOException e) {
        throw new NoDataException("IO Exception", e);
    }

相关问题