【发布时间】: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