【问题标题】:elastic search combining multiple term and range queries is providing zero results结合多个术语和范围查询的弹性搜索提供零结果
【发布时间】:2017-03-29 08:56:31
【问题描述】:

我已经为此苦苦挣扎了一个星期。我需要用以下组合在java中编写一个elasticsearch查询api:

  1. 价格范围(0 到 n 个范围)
  2. 年龄范围(0 到 n 个范围)
  3. 搜索文字
  4. 词条过滤器(可以匹配多个字段

我希望在每个组内具有 OR 关系(例如价格 0-10 或 11-15),但不同组之间具有 AND 关系(例如价格 0-10 AND productType="clothing")

我已经用 Java 编写了以下代码,我已经验证了我正在测试的范围和过滤器的数据存在,但我得到的结果集为零。我不确定这里缺少什么。

@Override
public List<Shoppingi> search(SearchCriteria criteria, Pageable pageable) {

    final NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
    BoolQueryBuilder boolQuery = boolQuery();
    // apply the text search
    if (StringUtils.isNotBlank(criteria.getSearchText()))
        boolQuery.must(multiMatchQuery(criteria.getSearchText(), FIELD_NAMES_FOR_TERM_SEARCH));
    // apply the term filters
    BoolQueryBuilder termsQuery = boolQuery();
    criteria.getFilters().entrySet().stream().forEach(entry -> termsQuery.should(termsQuery(entry.getKey(), entry.getValue())));
    // apply the range filters
    BoolQueryBuilder rangeQuery = boolQuery();
    criteria.getRangeFilters().forEach((key, value) -> rangeQuery.should(rangeQuery(key).gte(value.getLowerBound()).lt(value.getUpperBound())));
    boolQuery.must(termsQuery);
    boolQuery.must(rangeQuery);
    searchQuery.withQuery(boolQuery);
    searchQuery.withPageable(pageable);
    NativeSearchQuery query = searchQuery.build();
    log.info("query: {}", query.getQuery().toString());
    return elasticsearchTemplate.queryForList(query,Shopping.class);
}

【问题讨论】:

    标签: spring-data-elasticsearch elasticsearch-2.0 elasticsearch-java-api


    【解决方案1】:

    我将价格对象注释为 index.no,这导致查询不起作用。一旦我用未分析的价格重新索引我的数据,我的代码就开始工作了。所以上面的代码没有问题,这是我配置我查询的变量的方式。

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2015-09-11
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多