我想知道是否以及如何创建一个匹配关键字短语之一且不包含任何停止词短语的查询。例如:
List<String> keywords = Arrays.asList("one keyword", "another one");
List<String> stopWords = Arrays.asList("dismiss this");
Page<Result> results = elRepository.findByKeywordsAndStepwords(
keywords, stopwords, new PageRequest(0, 12));
这应该匹配包含一个精确短语("一个关键字"或"另一个")和没有停止词短语("驳回这个")的文档。请注意,如果文档只包含包含在短语中的术语(例如:
经过长时间的研究,这是我实现目标的唯一途径。希望能帮到别人:
BoolQueryBuilder keywordBuilder = boolQuery();
keywords.forEach(k -> keywordBuilder.should(matchPhraseQuery("text", k)));
BoolQueryBuilder stopWordBuilder = boolQuery();
stopWords.forEach(s -> stopWordBuilder.should(matchPhraseQuery("text", s)));
BoolQueryBuilder queryBuilder = boolQuery()
.must(keywordBuilder)
.mustNot(stopWordBuilder);
Page<Result> results= elRepository.search(queryBuilder, pageable);