我得到了很好的结果与正常的搜索查询。
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
String keyword = requestBody.getKeyword();
queryBuilder.should(QueryBuilders.matchQuery("fullText", keyword));
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.from(requestBody.getPage() - 1);
searchSourceBuilder.size(BROWSE_PAGE_DATA_LIMIT);
searchRequest.source(searchSourceBuilder);
try {
return client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "Error in ES search");
}
但是当我添加过滤时,结果忽略了我的搜索关键字。
queryBuilder.filter(QueryBuilders.termsQuery("authorId", filter.getAuthorIds()));
在这里,我尝试着取代solr的fq。我的方法有什么问题。
1条答案
按热度按时间yhqotfr81#
摘自es文档
如果bool查询至少包含一个should子句,并且没有must或filter子句,则默认值为1。否则,默认值为0。
基本上,如果bool查询中有一个filter或/and must子句,那么should子句将被忽略,直到min\u should\u match设置为合适的值。
将minshouldmatch设置为1。例如: