创建一个主查询请求对象:
代码语言:javascript复制MultiGetRequest request = new MultiGetRequest();
然后依次使用主请求对象的add方法,将子查询对象加入到主查询中
代码语言:javascript复制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));
指定查询哪些字段内容 或 过滤掉哪些字段:
代码语言: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 "么有查到你想要的数据...";
}