前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch Java API:Mget操作

ElasticSearch Java API:Mget操作

原创
作者头像
HLee
修改2021-11-10 17:54:40
1.5K0
修改2021-11-10 17:54:40
举报
文章被收录于专栏:房东的猫房东的猫

创建一个主查询请求对象:

代码语言:javascript
复制
MultiGetRequest request = new MultiGetRequest();

然后依次使用主请求对象的add方法,将子查询对象加入到主查询中

代码语言:javascript
复制
request.add(new MultiGetRequest.Item("index", "type", "id")); 

查询的文档内容不返回:fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE)

代码语言:javascript
复制
request.add(new MultiGetRequest.Item("index", "type", "id").fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE));

指定查询哪些字段内容 或 过滤掉哪些字段:

代码语言:javascript
复制
String[] includes = new String[] {"user", "*r"};
String[] excludes = Strings.EMPTY_ARRAY;
FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
request.add(new MultiGetRequest.Item("index", "type", "id").fetchSourceContext(fetchSourceContext));

指定查询的路由分片和版本等:

代码语言:javascript
复制
// 指定去哪个分片上查询,如何指定分片上没有,不会再去其它分片查询,如果不指定,则依次轮询各个分片查询
request.add(new MultiGetRequest.Item("index", "type", "with_routing").routing("some_routing"));
request.add(new MultiGetRequest.Item("index", "type", "with_parent").parent("some_parent"));
request.add(new MultiGetRequest.Item("index", "type", "with_version")
                    .versionType(VersionType.EXTERNAL)
                    .version(10123L));
                    
注:以上设置无法在主请求中设置

对主请求的设置:preference, realtime and refresh 需要在主请求里设置,子请求中无法设置这些值

代码语言:javascript
复制
request.preference("some_preference");
request.realtime(false);  // realtime的值默认为true
request.refresh(true);

代码语言:javascript
复制
POST sphinx-doctor/_mget
{
  "ids": [
    "134588"
  ]
}

通过索引名+id查询文档

代码语言:javascript
复制
/**
 * multiGet 查询
 * @param id
 * @param indexName
 * @return
 */
public String multiGet (String id, String indexName) throws IOException{

    // 构建 multi get
    MultiGetRequest request = new MultiGetRequest();
    // 为每个 id 构建查询语句
    request.add(new MultiGetRequest.Item(indexName, "_doc", id));
    // 查询
    MultiGetResponse response = restHighLevelClient.mget(request, RequestOptions.DEFAULT);

    // 解析
    for (MultiGetItemResponse itemResponse : response) {
        // 判断当前item获取是否成功
        if (itemResponse.getFailure() != null) {
            continue;
        }
        // 获取响应结果
        GetResponse getResponse = itemResponse.getResponse();
        // 判断结果是否存在
        if (getResponse.isExists()) {
            // 获得命中的信息
            String sourceAsString = getResponse.getSourceAsString();
            // 解析命中的信息
           return sourceAsString;
        }
    }
    return "么有查到你想要的数据...";
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com