参考 :Elasticsearch Reference [7.10] » Query DSL » Term-level queries » IDs
一、ID 查问
ES 每一行数据,即文档都会有一个 id,如果指定某一列 field 值作为 id,则该列 field 必须为惟一键,相似于 MySQL 的 UK;不过不指定,ES 会主动生成,经常为了更好的定位数据,会指定一列满足 UK 的 field 作为文档的 id,接下来咱们说一下依据 id 查问。
相似 MySQL 的 where id=?
1.1、命令行
GET /sms-logs-index/_doc/1
1.2、java 代码
@Test
public void idQuery() throws IOException {GetRequest request = new GetRequest(index);
GetResponse resp = client.get(request.id("1"), RequestOptions.DEFAULT);
System.out.println(resp);
}
二、IDs 查问
依据多个 id 查问,相似 MySQL 中的 where id in(id1,id2,id3)
2.1、命令行
POST /sms-logs-index/_search?pretty
{
"query": {
"ids": {"values": [1,2,3]
}
}
}
2.2、java 代码
@Test
public void idsQuery() throws IOException {
//1。创立 request 对象,查问用的对象个别都是 SearchRequest 对象
SearchRequest mySearchRequest = new SearchRequest(index);
//2,指定查问条件,依赖查问条件的对象 SearchSourceBuilder 的对象
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(0).size(10).query(QueryBuilders.idsQuery().addIds("1", "2", "3"));
mySearchRequest.source(builder);
//3. 执行查问
SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT);
//4. 获取到_source 中的数据,并展现
// 留神 RESTFUL 格调上是两个 hits,所以这里要两次 getHits()
for (SearchHit hit : search.getHits().getHits()) {Map<String, Object> result = hit.getSourceAsMap();
System.out.println(result);
}
}
关注我的公众号【宝哥大数据】,更多干货