在使用NativeSearchQueryBuilder的Elasticsearch中,如果与multiMatchQuery结合使用,则rangequery过滤器将失败

时间:2017-12-12 13:44:49

标签: java elasticsearch spring-data-elasticsearch

您好我正在尝试在ElasticSearch中查询,其中我想使用multiMatchQuery获取数据以搜索字符串并使用rangequery来过滤日期之间的数据

Object.equals()

日期过滤器查询失败,它为我提供了较旧日期的数据。我尝试使用booleanQueryBuilder仍然有旧日期。 如果我使用不带multiMatchQuery的rangeQuery过滤器,它会给我正确的数据。但为什么这个组合不起作用? 有没有关于使用springdata的工作?

我的文档看起来像这样

Calendar compareDate = Calendar.getInstance();
compareDate.add(Calendar.DATE, 14);
SearchQuery query = new NativeSearchQueryBuilder().withIndices("project")
                .withPageable(new PageRequest(offset, limit))
                .withFilter(rangeQuery("startDate").from(new Date().getTime()).to(compareDate.getTime()))
                .withFilter(multiMatchQuery(string,
                        new String[] { "name","platform", "department", "url"}).build();

1 个答案:

答案 0 :(得分:1)

您需要使用withQuery()代替名称错误的withFilter(),并且基本上是post_filter

您需要在bool查询中组合两个查询:

withQuery(
    boolQuery()
       .must(multiMatchQuery(string, new String[] { "name","platform", "department", "url"}))
       .filter(rangeQuery("startDate").from(new Date().getTime()).to(compareDate.getTime()))
)