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

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

这应该匹配包含确切短语之一(“一个关键字”或“另一个”)且不包含停用词短语(“忽略此”)的文档。请注意,如果文档仅包含短语中包含的术语(例如“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/

相关文章:

java - 方法应该返回 boolean,返回 int

java - 使用反射调用方法并返回 map

vb.net - ElasticSearch分析的字段

java - 将连接的字符串按每组 160 个字符进行分组,并对剩余的字符串执行相同的操作

java - 双原始类型数据的意外行为

java - 安卓编程: Authentication and data exchange with Java EE

mysql - 表 'performance_schema.session_variables' 不存在

java - Spring Boot 。从 MySql 模式自动创建实体类

elasticsearch - 根据Elasticsearch中的缺失字段对文档进行评分

node.js - 带有 NodeJS 的嵌入式 Elastic