【问题标题】:Search and filter with Spring Data Elasticsearch使用 Spring Data Elasticsearch 进行搜索和过滤
【发布时间】:2018-02-19 15:03:30
【问题描述】:

我有一个名为 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);

【问题讨论】:

    标签: java spring jpa elasticsearch spring-data-elasticsearch


    【解决方案1】:

    使用类似的东西

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

    这里的过滤器功能可以帮助我们解决这个问题

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 2021-04-21
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多