我想知道是否以及如何创建一个与关键字短语之一匹配且不包含任何停用词短语的查询。例如:
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));
这应该匹配包含确切短语之一(“一个关键字”或“另一个”)且不包含停用词短语(“忽略此”)的文档。请注意,如果文档仅包含短语中包含的术语(例如“another”),则它不应返回给定文档作为结果。
最佳答案
经过长时间的研究,这是我实现目标的唯一方法。希望它能帮助某人:
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);
关于java - 如何构建与 Spring Elasticsearch 存储库中的短语之一匹配的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487121/