ES--ids查詢
阿新 • • 發佈:2021-07-06
參考: 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); } }