创建一个主查询请求对象:
MultiGetRequest request = new MultiGetRequest();
然后依次使用主请求对象的add方法,将子查询对象加入到主查询中
request.add(new MultiGetRequest.Item("index", "type", "id"));
查询的文档内容不返回:fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE)
request.add(new MultiGetRequest.Item("index", "type", "id").fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE));
指定查询哪些字段内容 或 过滤掉哪些字段:
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));
指定查询的路由分片和版本等:
// 指定去哪个分片上查询,如何指定分片上没有,不会再去其它分片查询,如果不指定,则依次轮询各个分片查询
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 需要在主请求里设置,子请求中无法设置这些值
request.preference("some_preference");
request.realtime(false); // realtime的值默认为true
request.refresh(true);
POST sphinx-doctor/_mget
{
"ids": [
"134588"
]
}
通过索引名+id查询文档
/**
* 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 删除。