如何构建与Spring Elasticsearch存储库中的一个短语匹配的查询

时间:2016-11-08 12:34:32

标签: java spring elasticsearch spring-data

我想知道是否可以创建一个匹配其中一个关键字短语且不包含任何停用词短语的查询。例如:

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));

这应该匹配包含一个确切短语(“一个关键字”或“另一个”)和没有停用词短语(“忽略此”)的文档。请注意,如果文档仅包含短语中包含的术语(例如“其他”),则不应返回给定文档。

1 个答案:

答案 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);