Elasticsearch Java REST高级客户端 parent/child join

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

发布了139 篇原创文章 · 获赞 273 · 访问量 666万+

猜你喜欢

转载自blog.csdn.net/u014646662/article/details/100098851