我想知道是否可以创建一个匹配其中一个关键字短语且不包含任何停用词短语的查询。例如:
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));
这应该匹配包含一个确切短语(“一个关键字”或“另一个”)和没有停用词短语(“忽略此”)的文档。请注意,如果文档仅包含短语中包含的术语(例如“其他”),则不应返回给定文档。
答案 0 :(得分:1)
经过长时间的研究,这是我实现目标的唯一方法。希望它会帮助某人:
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);