elasticsearch筛选器结果忽略搜索关键字

j9per5c4  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(415)

我得到了很好的结果与正常的搜索查询。

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。我的方法有什么问题。

yhqotfr8

yhqotfr81#

摘自es文档
如果bool查询至少包含一个should子句,并且没有must或filter子句,则默认值为1。否则,默认值为0。
基本上,如果bool查询中有一个filter或/and must子句,那么should子句将被忽略,直到min\u should\u match设置为合适的值。
将minshouldmatch设置为1。例如:

queryBuilder.should(QueryBuilders.matchQuery("fullText", keyword)).minimumShouldMatch(1);

相关问题