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

你可能感兴趣的:(工作日常,ElasticSearch)