consulta ElasticSearch Java com a combinação de E / OU

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 mapadicionar 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);

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=378871&siteId=1
Recomendado
Clasificación