gpt4 book ai didi

java - 使用 Spring Data Elasticsearch 进行搜索和过滤

转载 作者:行者123 更新时间:2023-12-02 22:36:47 26 4
gpt4 key购买 nike

我有一个名为 Invoice 的 JPA 实体,它具有一些属性,我想搜索和过滤结果,但过滤器无法正常工作。我尝试了多种组合,但没有一种适合我。

这个正确地搜索在某些属性中具有“foobar”的实例:

// this is the search string...
String search = "foobar*";
QueryBuilder queryStringQuery = QueryBuilders.queryStringQuery(search);
NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
searchQuery.withQuery(queryStringQuery);
// build and run against the ElasticsearchRepository
NativeSearchQuery query = searchQuery.build();
Page<T> result = searchRepository.search(query);

这行得通并给我所有发票,但现在我只想拥有“新发票”,它由名为“state”的属性提供,然后具有值“New”。

目前,我试过的最后一个是这个(根据 SO 上的类似问题):

String search = "foobar*";
QueryBuilder queryStringQuery = QueryBuilders.queryStringQuery(search);
NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
searchQuery.withQuery(queryStringQuery);

// add filter
QueryBuilder filters = QueryBuilders.termQuery("state", "New");
searchQuery.withFilter(searchFilters);

// build and run against the ElasticsearchRepository
NativeSearchQuery query = searchQuery.build();
Page<T> result = searchRepository.search(query);

这个给了我一个空的结果,虽然一定有一些结果。

我也试过创建这样的东西,但这也不起作用:

String search = "foobar*";
QueryBuilder queryStringQuery = QueryBuilders.queryStringQuery(search);
searchFilters = QueryBuilders.termQuery("state", "New");

BoolQueryBuilder searchQuery = QueryBuilders.boolQuery().should(queryStringQuery).must(searchFilters);
Iterable<T> result = searchRepository.search(searchQuery);

最佳答案

使用这样的东西

QueryBuilder qb;

QueryBuilder stateFilters = QueryBuilders.boolQuery();
((BoolQueryBuilder) filters).filter(QueryBuilders.matchQuery("state", "New"));
qb = QueryBuilders.boolQuery().should(QueryBuilders.queryStringQuery("foobar*")).filter(stateFilters );

filter 函数可以帮助我们解决这个问题

这里 qb 将有正确的查询,现在可以使用 elasticsearchRepository.search(qb) 进行搜索;

以下是 spring 文档中的一些信息: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.operations

关于java - 使用 Spring Data Elasticsearch 进行搜索和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com