Я пытаюсь написать запрос в Elasticsearch через Spring и Java (клиент Elasticsearch).
Запрос выглядит примерно так:
SELECT *** FROM elasticsearch_index
WHERE isActive = 1 AND
(
(store_code = 41 AND store_genre IN ('01', '03') )
OR (store_code = 40 AND store_genre IN ('02') )
OR (store_code = 42 AND store_genre IN ('05', '06') )
)
AND LATITUDE ...
AND LONGITUDE...
Обратите внимание, что параметры в внешние скобки - Map<Integer, String[]>
, поэтому я бы перебрал map
, чтобы добавить условие AND + OR.
Я пробовал с эквивалентным Java подходом, но, похоже, не работает:
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("isActive", 1));
BoolQueryBuilder orQuery = QueryBuilders.boolQuery();
for (Entry<Integer, String[]> entry : cvsDepoMapping.entrySet()) {
int key = entry.getKey();
String[] value = entry.getValue();
orQuery.must(QueryBuilders.matchQuery("storeCode", key));
orQuery.must(QueryBuilders.termsQuery("storeGenre", value)); // IN clause
boolQueryBuilder.should(orQuery);
}
Но ни это не работает, ни. Я уверен в решении. Я изо всех сил пытаюсь найти Java эквивалентные условия для вышеуказанного условия.
Я использую:
- Spring Boot 2.1.1.RELEASE
- Elasticsearch 6.4 .3
Любая помощь приветствуется !!!!