我有一个JPA实体叫做Invoice
,其中包含一些属性,我想要搜索和过滤结果,但是过滤器没有正常工作。我尝试了各种组合,但都没有成功。
下面的代码可以正确地搜索具有某些属性中的“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);