elasticsearch 用java client 多个and or 条件 怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch 用java client 多个and or 条件 怎么写相关的知识,希望对你有一定的参考价值。

参考技术A

我刚刚特意写的,用2个Map作为传参,一个是must,一个是should。代码如下:


//创建查询
SearchRequestBuilder srb = client.prepareSearch(INDEX);
srb.setTypes(ASK_TYPE);
srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
//分页
srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize);
//按时间倒序
SortBuilder sortBuilder = SortBuilders.fieldSort("date").order(SortOrder.DESC);
srb.addAggregation(aggregation);//聚合
srb.addSort(sortBuilder);//排序

/**********************主要看这里 start*********************************/

if(null != mustMap && mustMap.size() > 0)
    
    //创建一个查询
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    
    //这里查询的条件用map传递
    for(String key : mustMap.keySet())
        queryBuilder.must(QueryBuilders.termQuery(key,mustMap.get(key)));
    
    //这里查询的条件用map传递
    for(String key : shouldMap.keySet())
        queryBuilder.should(QueryBuilders.termQuery(key,mustMap.get(key)));
    
    //查询
    srb.setQuery(queryBuilder);

/**********************主要看这里 end*********************************/
//请求
SearchResponse response = srb.get();
//更多看这里:http://www.sojson.com/tag_elasticsearch.html

本回答被提问者采纳

elasticSearch用java查询问题

如下sql 用 ES 的java API 如何实现
sql:
select c,d from my_table where a = 1
and (b = 2 or b=3)
group by c,d

请大神优先回答 括号 or 的实现吧

你这个查询用filter、must皆可,推荐filter

String index = "indexName"; // 你的index名称
String type = "my_table";

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
// boolQuery.must(QueryBuilders.termQuery("a", 1));
// boolQuery.must(QueryBuilders.termsQuery("b", 2, 3));
boolQuery.filter(QueryBuilders.termQuery("a", 1));
boolQuery.filter(QueryBuilders.termsQuery("b", 2, 3));

SearchResponse searchResponse = client.prepareSearch(index).setTypes(type)
                                                .setQuery(boolQuery)
                                                .addSort("c", SortOrder.ASC)
                                                .addSort("d", SortOrder.ASC)
                                                .storedFields("c", "d")
                                                .get();
参考技术A 查询器里的should是或,must是且

以上是关于elasticsearch 用java client 多个and or 条件 怎么写的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch 用java client 多个and or 条件 怎么写

ElasticSearch 用ik分词器建立索引(java API)

java怎么给elasticsearch插入数据

TP框架怎么将elasticsearch连接上

java SQL查询elasticsearch?

elasticsearch,java api, transport Client, 查询时索引库可以用通配符*和删除接口不能用