Elasticsearch 7.6.2 API操作

**本文基于elasticsearch 7.6.2 的API进行测试,话不多说,直接上代码!!!**

/**
 * es 7.6.x高级API测试
 */
@SpringBootTest
class SpringbootEsApiApplicationTests {

	@Autowired
	@Qualifier("restHighLevelClient")   //使用这种方式可以简写为client
	private RestHighLevelClient client;

	/**
	 * 测试创建索引
	 * @throws IOException
	 */
	@Test
	void testCreateIndex() throws IOException {
		//1.创建索引请求
		CreateIndexRequest request = new CreateIndexRequest("es_book");

		//2.客户端执行请求 IndicesClient
		CreateIndexResponse createIndexResponse = client.indices()
				.create(request, RequestOptions.DEFAULT);

		System.out.println(createIndexResponse);
	}

	/**
	 * 测试获取索引,只能判断是否存在
	 * @throws IOException
	 */
	@Test
	void getIndexExist() throws IOException {

		GetIndexRequest request = new GetIndexRequest("es_book2");
		boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

	/**
	 * 测试删除索引
	 * @throws IOException
	 */
	@Test
	void deleteIndex() throws IOException {

		DeleteIndexRequest request = new DeleteIndexRequest("es_book");
		AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
		System.out.println(delete.isAcknowledged());
	}

	/**
	 * 测试添加文档
	 * @throws IOException
	 */
	@Test
	void testAddDocument() throws IOException {

		//创建对象
		Book book = new Book("es书", 15.0)

		//创建请求
		IndexRequest request = new IndexRequest("es_book");

		//创建规则 PUT /es_book/_doc/1
		request.id("1");
		request.timeout("1s");
		//request.timeout(TimeValue.timeValueSeconds(1));

		String jsonStr = JSON.toJSONString(book);
		System.out.println(jsonStr);

		//将数据放入请求json(对象转换成json)
		request.source(JSON.toJSONString(book), XContentType.JSON);

		//客户端发送请求,获取响应的结果
		IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
		System.out.println(indexResponse.toString());
		System.out.println(indexResponse.status()); //CREATED

	}

	/**
	 * 判断是否存在文档 GET /es_book/_doc/1
	 */
	@Test
	void testDocumentIsExist() throws IOException {
		GetRequest request = new GetRequest("es_book", "1");

		//不获取request的上下文
		request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
		request.storedFields("_none_");

		boolean exists = client.exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

	/**
	 * 获取文档信息
	 * @throws Exception
	 */
	@Test
	void testGetDocument() throws Exception {
		GetRequest request = new GetRequest("es_book", "1");

		GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
		System.out.println(getResponse.getSourceAsString());
	}

	/**
	 * 测试更新文档
	 * @throws IOException
	 */
	@Test
	void testUpdateDocument() throws IOException {

		UpdateRequest request = new UpdateRequest("es_book", "1");
		request.timeout("1s");

		Book book = new Book("es书", 18.0);

		request.doc(JSON.toJSONString(book), XContentType.JSON);

		UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
		System.out.println(updateResponse.status());
	}

	/**
	 * 测试删除文档
	 * @throws IOException
	 */
	@Test
	void testDeleteDocument() throws IOException {
		DeleteRequest deleteRequest = new DeleteRequest("es_book", "1");
		deleteRequest.timeout("1s");

		DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
		System.out.println(deleteResponse.status());
	}

	/**
	 * 批量插入数据
	 * @throws IOException
	 */
	@Test
	void testBulkRequest() throws IOException {
		BulkRequest bulkRequest = new BulkRequest();
		bulkRequest.timeout("10s");

		List<User> userList = new ArrayList<>();
		userList.add(new User("德玛西亚", 1));
		userList.add(new User("诺克萨斯", 2));
		userList.add(new User("德邦总管", 3));
		userList.add(new User("虚空行者", 4));
		userList.add(new User("发条魔灵", 5));

		//批处理请求
		for (int i = 0; i < userList.size(); i++) {
			bulkRequest.add(
					new IndexRequest("user_index")
					.id("" + (i + 1))  //不设置id,会生成随机id
					.source(JSON.toJSONString(userList.get(i)), XContentType.JSON)
			);
		}

		BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
		System.out.println(bulkResponse.hasFailures());

	}

	/**
	 * 条件查询
	 * @throws IOException
	 */
	@Test
	void testSearchRequest() throws IOException {

		SearchRequest searchRequest = new SearchRequest("es_book");

		//构建搜索条件
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

		//查询条件,使用QueryBuilders来实现
		//QueryBuilders.termQuery 精确匹配
		//QueryBuilders.matchAllQuery() 查询匹配所有
		//不能使用"发条魔灵"精确匹配,因为被分词器拆分成了一个个字
		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "魔");
//		MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

		searchSourceBuilder.query(termQueryBuilder);
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

		//将构建器放入请求
		searchRequest.source(searchSourceBuilder);

		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
		SearchHits hits = searchResponse.getHits();

		System.out.println(JSON.toJSONString(hits));

		for (SearchHit hit : hits.getHits()) {
//			System.out.println(hit.getSourceAsMap());
			System.out.println(hit.getSourceAsString());
		}
	}


//	api测试2
	@Test
	public void testQuery() throws IOException {
		SearchRequest searchRequest = new SearchRequest("es_book");
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

		MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
		searchSourceBuilder.query(matchAllQueryBuilder);
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

		searchRequest.source(searchSourceBuilder);

		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

		SearchHit[] hits = searchResponse.getHits().getHits();
		for (SearchHit hit : hits) {
//			String result = hit.getSourceAsString();
			Map<String, Object> result = hit.getSourceAsMap();
			System.out.println(result.values());
		}
	}

	/**
	 * 爬取数据写入es(es索引库中该索引不存在)
	 */
	@Test
	public void add() throws Exception {

		List<Content> contents = HtmlParseUtil.parseJD("elasticsearch");

		BulkRequest bulkRequest = new BulkRequest();
		for (Content content : contents) {
			bulkRequest.add(
					new IndexRequest("es_book")
					.source(JSON.toJSONString(content), XContentType.JSON)
			);
		}

		// 客户端提交请求
		BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);

	}
/**
	 * 指定关键字在一个索引库下的多个字段进行匹配
	 * 如 keyword: 班德尔城,在"addr", "name"字段中进行搜索匹配
	 * @throws IOException
	 */
	@Test
	public void testMultiQuery() throws IOException {
		SearchRequest searchRequest = new SearchRequest("lol_info");
		MultiMatchQueryBuilder builder1 = QueryBuilders.multiMatchQuery(25, "age");
		MultiMatchQueryBuilder builder2 = QueryBuilders.multiMatchQuery("约德尔", "addr");

//		不能使用精确termQuery进行多条件匹配查询
//		TermQueryBuilder builder1 = QueryBuilders.termQuery("age", 25);
//		TermQueryBuilder builder2 = QueryBuilders.termQuery("addr", "班德尔城");

		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//		searchSourceBuilder.from(1);
//		searchSourceBuilder.size(5);
		// 查询结果按照age进行降序排序
//		searchSourceBuilder.sort("age", SortOrder.DESC);
//		searchSourceBuilder.query(builder);

		BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
		// 包含builder1和builder2,相当于sql中的and
		boolQueryBuilder.must(builder1);
		boolQueryBuilder.must(builder2);
		// 等价于sql中的where
		boolQueryBuilder.filter(builder2);
		// 等价于sql中的not
		boolQueryBuilder.mustNot(builder2);
		
		searchSourceBuilder.query(boolQueryBuilder);

		searchRequest.source(searchSourceBuilder);

		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
		SearchHit[] hits = searchResponse.getHits().getHits();
		for (SearchHit hit : hits) {
			System.out.println(hit.getSourceAsMap());
		}

	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值