ElasticSearch 5.3 java API 查询

关于ElasticSearch的index创建在这里已经介绍了。
根据id查询数据:

//根据id查询的话使用IdsQueryBuilder来添加id
IdsQueryBuilder queryBuilder = QueryBuilders.idsQuery();
queryBuilder.addIds(orgId);
SearchResponse response = client.prepareSearch(orgIndexName).setTypes(orgTypeName).setQuery(queryBuilder).get();
//查询所获取的数据都在hits里面,是以数据的形式,每一个hits[?]里面都有很多其他数据
SearchHit[] hits = response.getHits().getHits();
if(Utils.isEmpty(hits)){
    return null;
}
//通过getSourceAsString就可获取数据的json格式
return JSON.parseObject(hits[0].getSourceAsString(), OrgESData.class);

通过条件查询:
      ElasticSearch的QueryBuilder具有这三种:must、 should、mustNot 常用的选择,must 相当于 and 、should 相当于 or 、mustNot 相当于 not 。要注意的是当只有一个should的时候也相当于must。

// SELECT t.* FROM table t WHERE t.teamId = ? 
//只有一个条件时,直接这样写
client.prepareSearch(orgIndexName).setTypes(orgTypeName).setQuery(QueryBuilders.termQuery("teamId", teamId)).get()

//也可以这样,这里 qb的must可以换成should ,效果是一样的。
BoolQueryBuilder qb = QueryBuilders.boolQuery();
qb.must(QueryBuilders.termQuery("teamId", teamId));
// termQuery 是代表短语、不可拆分。就是不会把你teamId拿去切词,然后再去查,而是直接拿去查询
SearchResponse response = client.prepareSearch(orgIndexName).setTypes(orgTypeName).setQuery(qb).get()

//SELECT * FROM table t WHERE t.orgName AND (t.orgPath = ? OR t.orgPath = ?)
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.matchQuery("orgName", keyWord));
//为了实现括号的查询得在创建一个queryBuilder 
BoolQueryBuilder queryBuilder2 = QueryBuilders.boolQuery();
for (String o : orgPaths) {
    //循环添加,t.orgPath = ?。  Operator.AND 表示对该值全符合 Operator.OR 表示部分符合
    queryBuilder2.should(QueryBuilders.matchQuery("orgPath", o).operator(Operator.AND));
}
//把queryBuilder2添加到queryBuilder里面
queryBuilder.must(queryBuilder2);
//这里还可设置分页
SearchResponse response = client.prepareSearch(orgIndexName).setTypes(orgTypeName).setQuery(queryBuilder).setFrom(0).setSize(size).get()
//提取结果数据
SearchHit[] htis= response.getHits().getHits()
hits[0].getSourceAsString()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值