Java elasticsearch 7+ 版本 High Level REST Client 使用实例(史上es最全讲解)

 elastic search理解(以下 简称es)
    ES(ElasticSearch)是一款分布式全文检索框架,底层基于基于Lucene实现。ES相当于一个数据库,有 index type 属性,index 是索引,相当于数据库的一张表 ,type 是文档,相当于数据库中的行,包含很多字段。与数据库相比更加智能,有很多全文检索方式。

es相关插件

    1.kibana  这是一个es数据展示的图形化界面,可以在官网下载。在 https://blog.csdn.net/Meetyouhere/article/details/103188730      这篇博客我中将详细讲解如何使用

    2.logstash  这是一个可以将MySQL数据导入到elasticsearch,十万条数据大概1分钟左右,速度还是很快的。不过需要有很多配置。在     这篇博客中我将详细讲解如何配置及使用。

可以在https://www.elastic.co/cn/downloads/past-releases下载所有版本的es,kibana和logstash

ES全文本搜索

      可以用es的 Java API 直接进行搜索,对字段进行分割 (汉语和英文使用不同的分词器,在logstash中进行配置)不需要写sql 语句。

      搜索种类 (可以参考https://blog.csdn.net/sugesi/article/details/80031151

     一、 简单查询

       1.对多个字段进行匹配 是否包含某个单词

       2.对某个字段进行模糊搜索可以设置 相似度。

      3.范围查询

  二、  聚合查询

  三、嵌套查询

  es 直接在官网下载 解压 ,双击bin 目录下的 elasticsearch.bat即可,访问 http://localhost:9200/  出现一下类似信息即表示安装成功

可以添加到服务,这样每次电脑启动,此服务也会启动。

  下面我将介绍简单查询中的前两个(亲测 实例)

1.获取es 的客户端 即 连接es

private static int port = 9200;                 
private static String host = "localhost";   //可以写 ip  但是 logstash 配置要修改 



public RestHighLevelClient getClient() throws UnknownHostException {

		RestClientBuilder restClient = RestClient.builder(new HttpHost(host, port,  
     "http"));


// 定义监听器,节点出现故障会收到通知。
		restClient.setFailureListener(new RestClient.FailureListener() {
			@Override
			public void onFailure(Node node) {
				super.onFailure(node);
			}
		});
		// 定义节点选择器 这个是跳过data=false,ingest为false的节点
		restClient.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS);
		// 定义默认请求配置回调
		restClient.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
			@Override
			public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
				return requestConfigBuilder.setConnectTimeout(90000) // 连接超时(默认为1秒)
						.setSocketTimeout(30000); // 套接字超时(默认为30秒)
			}
		});


    RestHighLevelClient client = new RestHighLevelClient(restClient);

    return client;
}

2.简单匹配搜索

public void testMatchSearch(RestHighLevelClient client) throws IOException {
		// 基础设置   new SearchRequest("patent"); "patent" 为索引名称
		SearchRequest searchRequest = new SearchRequest("patent");
		// 搜索源构建对象
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		// 匹配关键字

		searchSourceBuilder.query(
				QueryBuilders.matchQuery("relation_ship", "one integrated can not replace").minimumShouldMatch("1%"));   //minimumShouldMatch 最小匹配度
		searchRequest.source(searchSourceBuilder);
		// 发起请求,获取结果
		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);    //注意默认返回10条数据  解决办法可以用分页查询,具体实现 下面第一快代码有
		SearchHits hits1 = searchResponse.getHits();
		SearchHit[] searchHits1 = hits1.getHits();

}

3.对某个字段进行模糊搜索

public static void testMultiMatchSearch(RestHighLevelClient client) throws IOException {
		// 基础设置
		SearchRequest searchRequest = new SearchRequest("caselist");
		// 搜索源构建对象
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

    BoolQueryBuilder queryBuilder = 
   QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("case_number",                
      ("*201910*").toLowerCase()));   //一定要转成小写 toLowerCase() 否则搜索不到,加上以后大小写都可搜索到
      // 注意 searchSourceBuilder 默认返回10 条数据,如果需要返回实级条数需要设置                 //可以使用分页查找 比如设置 searchSourceBuilder.from(1);就是从第二页进行查找,类似于MySQL中的limit 


        searchSourceBuilder.from(0);  //意思是从第一页开始查找 
		searchSourceBuilder.size(10);//每页大小
		searchSourceBuilder.query(queryBuilder);

        searchRequest.source(searchSourceBuilder);
		// 发起请求,获取结果
		SearchResponse searchResponse;

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

		SearchHits hits = searchResponse.getHits();
		// 得到匹配度高的文档
		SearchHit[] searchHits = hits.getHits();
		// 打印结果集
		System.out.println(searchHits.length);
		for (SearchHit searchHit : searchHits) {
			System.out.println(searchHit.toString());
			System.out.println("=============1");
		}
}

可以参考 https://github.com/bigseaa/elasticsearch-demo/blob/master/src/test/java/com/bigsea/search/TestSearch.java 这个代码

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值