Adi V:
Eu estou tentando escrever uma consulta no ElasticSearch via Primavera e Java (cliente ElasticSearch).
A consulta é um pouco como:
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...
Por favor, saibam que os parâmetros dentro dos suportes exteriores é um Map<Integer, String[]>
, então eu iria iterar sobre a map
adicionar o E + ou condição.
Eu tentei com abordagem Java equivalente, mas não parece trabalho:
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);
}
Mas também não é este trabalho, nem. Estou certo da solução. Eu estou lutando para encontrar as condições equivalentes Java para a condição acima.
Estou usando:
- Primavera Bota 2.1.1.RELEASE
- ElasticSearch 6.4.3
Qualquer ajuda é apreciada !!!!
PJMeisch:
dentro de seu ou consulta que você precisa colocar um aninhada e consulta para cada entrada:
sem tentar executá-lo:
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("isActive", 1));
BoolQueryBuilder orQuery = QueryBuilders.boolQuery();
for (Entry<Integer, String[]> entry : cvsDepoMapping.entrySet()) {
BoolQueryBuilder storeQueryBuilder = QueryBuilders.boolQuery();
int key = entry.getKey();
String[] value = entry.getValue();
storeQueryBuilder.must(QueryBuilders.matchQuery("storeCode", key));
storeQueryBuilder.must(QueryBuilders.termsQuery("storeGenre", value)); // IN clause
orQuery.should(storeQueryBuilder);
}
boolQueryBuilder.must(orQuery);