Elasticsearch Java REST高级客户端 parent/child join
Elasticsearch 7.2.0
1.数据准备
2.parentId根据父文档id查询相关子文档
3.通过ID和routing ,访问子文档(不加routing查不到)
4.hasChild 返回父文档
5.hasParent 返回相关的子文档
6.Java REST高级客户端连接及关闭
对人工智能感兴趣点下面链接
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。
https://www.cbedai.net/u014646662
1.数据准备
数据准备见:https://blog.csdn.net/u014646662/article/details/100081257
2.parentId根据父文档id查询相关子文档
/**
* 根据父文档id查询相关子文档
*/
private static void parentId() {
//客户端连接
RestHighLevelClient client = getClient();
SearchRequest request = new SearchRequest("my_blogs");
SearchSourceBuilder builder = new SearchSourceBuilder();
request.source(builder);
//子文档名
String child_type = "comment";
//父文档ID
String id = "blog2";
//ParentId查询
ParentIdQueryBuilder parentIdQueryBuilder = new ParentIdQueryBuilder(child_type, id);
builder.query(parentIdQueryBuilder);
builder.from(0);
builder.size(10);
try {
//提交查询
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
response.getHits().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
} finally {
close(client);
}
}
3.通过ID和routing ,访问子文档(不加routing查不到)
这个就是Get查询,不过需要加上路由
/**
* 通过ID和routing ,访问子文档(不加routing查不到)
*/
private static void childID() {
RestHighLevelClient client = getClient();
GetRequest getRequest = new GetRequest("my_blogs", "comment3");
//必须指定路由(父ID)
getRequest.routing("blog2");
try {
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
if (getResponse.isExists()) {
String sourceAsString = getResponse.getSourceAsString();
System.out.println(sourceAsString);
} else {
System.out.println("未查到结果");
}
} catch (IOException e) {
e.printStackTrace();
}finally {
close(client);
}
}
4.hasChild 返回父文档
/**
* 返回父文档
*/
private static void hasChild() {
RestHighLevelClient client = getClient();
SearchRequest request = new SearchRequest("my_blogs");
SearchSourceBuilder builder = new SearchSourceBuilder();
request.source(builder);
// 子文档名
String child_type = "comment";
// 子文档查询条件
QueryBuilder matchQuery = QueryBuilders.matchQuery("comment", "Elastic");
// 是否计算评分
ScoreMode scoreMode = ScoreMode.Total;
HasChildQueryBuilder hasChildQueryBuilder = new HasChildQueryBuilder(child_type, matchQuery, scoreMode);
builder.query(hasChildQueryBuilder);
builder.from(0);
builder.size(10);
builder.sort("_score");
SearchResponse response = null;
try {
response = client.search(request, RequestOptions.DEFAULT);
response.getHits().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
} finally {
close(client);
}
}
5.hasParent 返回相关的子文档
/**
* 返回相关的子文档
*/
private static void hasParent() {
RestHighLevelClient client = getClient();
SearchRequest request = new SearchRequest("my_blogs");
SearchSourceBuilder builder = new SearchSourceBuilder();
request.source(builder);
// 父文档名
String parent_type = "blog";
// 子文档查询条件
QueryBuilder matchQuery = QueryBuilders.matchQuery("title", "hadoop learning");
// 是否计算评分
boolean score = true;
HasParentQueryBuilder hasParentQueryBuilder = new HasParentQueryBuilder(parent_type, matchQuery, score);
builder.query(hasParentQueryBuilder);
builder.from(0);
builder.size(10);
// 按评分排序
builder.sort("_score");
SearchResponse search = null;
try {
search = client.search(request, RequestOptions.DEFAULT);
search.getHits().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
} finally {
close(client);
}
}
6.Java REST高级客户端连接及关闭
REST高级客户端多种方式连接:https://blog.csdn.net/u014646662/article/details/98966833
7.以上查询,需要提前指定查询结果的个数,如需要查询全部文档,可以使用SearchScrollApi
SearchScrollApi例子:https://blog.csdn.net/u014646662/article/details/96993691