gpt4 book ai didi

java - 带有AND/OR组合的Elasticsearch Java查询

转载 作者:行者123 更新时间:2023-12-02 22:54:10 25 4
gpt4 key购买 nike

我正在尝试通过Spring和Java(Elasticsearch客户端)在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

  • 任何帮助表示赞赏!!!

    最佳答案

    在您的或查询中,您需要为每个条目放置一个嵌套查询。

    无需尝试运行它:

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

    关于java - 带有AND/OR组合的Elasticsearch Java查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60940757/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com