【发布时间】:2021-03-12 14:29:48
【问题描述】:
我使用 boolQueryBuilder 进行以下查询,检查 status1 或 status2 并且时间小于 currentTime 是否匹配:
public BoolQueryBuilder createSearchQuery(Long currentTime) {
// Build and operator
final BoolQueryBuilder firstAndOperator = createAndOperator(currentTime, "status1");
// Build AND operator
final BoolQueryBuilder secondAndOperator = createAndOperator(currentTime, "status2);
// Build OR
return createOrOperator(firstAndOperator, secondAndOperator);
}
private BoolQueryBuilder createOrOperator(BoolQueryBuilder firstAndOperator, BoolQueryBuilder secondAndOperator) {
return new BoolQueryBuilder()
.should(firstAndOperator)
.should(secondAndOperator);
}
private BoolQueryBuilder createAndOperator(Long currentDate, Status status) {
return QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery(STATUS, status))
.must(QueryBuilders.rangeQuery(TIME).lte(currentDate));
}
如何使用 multiMatchQuery 合并它们?
这是我的尝试,但它不起作用
public BoolQueryBuilder createSearchQuery(Long currentTime) {
return new BoolQueryBuilder()
.should(QueryBuilders
.multiMatchQuery("status1" + " " + "status2", STATUS)
.type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX)
.operator(Operator.OR))
.must(QueryBuilders.rangeQuery(TIME)
.lte(currentTime));
}
【问题讨论】:
-
不清楚需要合并什么...
-
关于转换语法
-
使用多查询
-
是的,但是不清楚要与其他查询合并什么查询?以及它们应该如何合并......也许用 DSL 语言编写您期望的查询,这样会更清楚
-
所以我想要的是,用 multiyquery 简化应该和必须的操作
标签: spring-boot elasticsearch spring-data-jpa