java - Elasticsearch REST 高级客户端结合了查询构建器

标签 java spring-boot elasticsearch

我需要使用 ES REST 高级客户端 (Java) 创建类似于高级搜索的东西。
首先,我有一个搜索关键字可以搜索所有字段。
为此,我使用 QueryStringQueryBuilder

SearchSourceBuilder ticketInfoSourceBuilder = new SearchSourceBuilder();
ticketInfoSourceBuilder.from(pageable.getOffset());
ticketInfoSourceBuilder.size(pageable.getPageSize());
ticketInfoSourceBuilder.sort(new FieldSortBuilder(sortField).order(sortOrder));
ticketInfoSourceBuilder.query(QueryBuilders.queryStringQuery("ABC1234"));

现在,我需要使用 TermsQueryBuilder 添加更多过滤器。

是否可以合并这两个查询构建器?

我想添加以下过滤器:

"terms" : { "ticket.inquiryType" : ["INQTYP01", "INQTYP06"]}
"terms" : { "ticket.status" : ["NEW", "CLOSED"]}
"terms" : { "ticket.ownership" : ["OWNED", "OTHER_OWNER"]}

是否可以结合两个查询构建器来实现类似高级搜索的功能?

谢谢!

最佳答案

是的,您可以使用这样的 bool 查询来做到这一点:

QueryBuilder query = QueryBuilders.boolQuery()
   .must(QueryBuilders.queryStringQuery("ABC1234"))
   .filter(QueryBuilders.termsQuery("ticket.inquiryType", "INQTYP01", "INQTYP06"))
   .filter(QueryBuilders.termsQuery("ticket.status", "NEW", "CLOSED"))
   .filter(QueryBuilders.termsQuery("ticket.ownership", "OWNED", "OTHER_OWNER"));
ticketInfoSourceBuilder.query(query);

关于java - Elasticsearch REST 高级客户端结合了查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50691758/

相关文章:

spring-boot - KafkaTemplate 线程安全吗

java - Spring Boot Thymeleaf 3 外部 javascript 模板配置

elasticsearch - 使用multi_match的查询未获得预期的顺序

docker - 使用Dropwizard访问Elasticsearch Docker-拒绝连接

字符串的 Java 集合排序方法不适用于区分大小写和特殊字符

java - 如何从服务器创建视频 URL 的缩略图

java - 如何通过 setVisible() 方法 wicket ajax 更改方法中模型的可见性

java - 未找到依赖项 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.3'

node.js - elastic js v5.0文档中没有id时如何自动生成id

java - IntelliJ IDEA 代码完成显示所有构造函数签名?