如何编写相当于普通查询的弹性搜索查询?

时间:2017-05-16 14:41:56

标签: elasticsearch

如何为以下查询形成弹性搜索查询?

"or (test.period.fromDate >= :fromDate "
+ "and test.period.toDate < :toDate)"

我试过这个,但在must方法中抛出编译时错误。

  

方法必须(RangeFilterBuilder)未定义RangeFilterBuilder类型

.should(rangeFilter("test.period.fromDate").gte(sc.getFromDate())
.must(rangeFilter("test.period.toDate").lt(sc.getToDate())))

1 个答案:

答案 0 :(得分:0)

你的问题是你忘记了一个括号。这应该是:

.should(
  rangeFilter("test.period.fromDate").gte(sc.getFromDate())
)
.must(
  rangeFilter("test.period.toDate").lt(sc.getToDate())
)

must部分应用于should部分之后,而不是rangeFilter部分。

此外,我认为您可能会遇到另一个基于您提供的类似SQL的查询的问题。我认为查询应该是:

.should(
  boolQuery().must(
    rangeFilter("test.period.fromDate").gte(sc.getFromDate())
  )
  .must(
    rangeFilter("test.period.toDate").lt(sc.getToDate())
  )
)