1
私は今1週間これを苦労しています。私は、以下の組み合わせを使用してJavaでelasticsearchクエリAPIを記述する必要があります。複数の用語と範囲のクエリを組み合わせた弾性検索はゼロの結果を提供しています
- 価格帯(範囲のn個の0)
- 年齢の範囲(レンジのn個の0)
- 検索テキスト
- 用語フィルタ(複数のフィールド
を一致させることができます、私は例えば価格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);
}