java rest client 例子,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/  出现一下类似信息即表示安装成功

1fb356e72398cc885158c800634225f1.png

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

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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值