1

私は今1週間これを苦労しています。私は、以下の組み合わせを使用してJavaでelasticsearchクエリAPIを記述する必要があります。複数の用語と範囲のクエリを組み合わせた弾性検索はゼロの結果を提供しています

  1. 価格帯(範囲のn個の0)
  2. 年齢の範囲(レンジのn個の0)
  3. 検索テキスト
  4. 用語フィルタ(複数のフィールド

を一致させることができます、私は例えば価格0-10または11-15(各グループ内OR関係を持つようにしたい)が、異なるグループ間の関係s(例えば、価格0-10 AND productType = "衣類")

私は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); 
} 

答えて

1

価格オブジェクトにindex.noと注釈を付けると、クエリが機能しなくなりました。 non_analyzedとして価格でデータを再索引付けすると、コードが動作するようになりました。上記のコードで何も問題はありませんでした。これは、私が照会していた変数を設定する方法でした。

関連する問題