乐趣区

关于大数据:ESids查询

参考 :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);
        }
    }

关注我的公众号【宝哥大数据】,更多干货

退出移动版