Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
上面讲了两个程序Elasticsearch和kibana,以下是Elasticsearch和kibana全版本下载地址,根据各自的操作系统下载对应的版本
https://elasticsearch.cn/download/
这里下载elasticsearch-7.10.2-windows-x86_64 kibana-7.10.2-windows-x86_64
elasticsearch配置
elasticsearch的配置文件在config/elasticsearch.yml,删除前面的#号配置ip和端口,不删除就默认是本机
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#服务ip地址
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#服务端口地址
#http.port: 9200
#
# For more information, consult the network module documentation.
通过bin/elasticsearch.bat 启动服务
输入地址查看到图片信息证明启动成功
kibana配置
kibana配置文件在kibana-7.10.2-windows-x86_64\config\kibana.yml
设置Elasticsearch的地址,i18n.locale: "zh-CN"修改成中文版
bin\kibana.bat 启动。
elasticsearch.hosts: ["http://localhost:9200"]
i18n.locale: "zh-CN"
启动以后的界面
点击开发工具可以执行elasticsearch命令
创建文档时自动创建索引
当向一个不存在的索引中写入文档时,会自动创建索引。也可以用来修改索引.
POST student/_doc/1
{
"name": "张三"
}
_doc/1 这个1可以当主键使用
POST student/_doc/1
{
"name": "张三1"
}
删除索引
DELETE student
Java High Level REST Client调用
<!--es客户端,不使用springboot封装的客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.5.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.5.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.6.2</version>
</dependency>
package com.zcdsj.ElasticSearch;
import com.alibaba.fastjson.JSON;
import com.zcdsj.bean.TCarPassBak;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.Date;
@Slf4j
@Service
public class IndexService {
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 增加文档信息
*/
public void addDocument(TCarPassBak tCarPassBak) {
try {
// 创建索引请求对象
IndexRequest indexRequest = new IndexRequest("t_car", "doc", tCarPassBak.getId());
// 将对象转换为 byte 数组
byte[] json = JSON.toJSONBytes(tCarPassBak);
// 设置文档内容
indexRequest.source(json, XContentType.JSON);
// 执行增加文档
IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
log.info("创建状态:{}", response.status());
} catch (Exception e) {
log.error("", e);
}
}
/**
* 获取文档信息
*/
public void getDocument() {
try {
// 获取请求对象
GetRequest getRequest = new GetRequest("student", "_doc", "1");
// 获取文档信息
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
// 将 JSON 转换成对象
if (getResponse.isExists()) {
TCarPassBak userInfo = JSON.parseObject(getResponse.getSourceAsBytes(), TCarPassBak.class);
log.info("员工信息:{}", userInfo);
System.out.println(userInfo);
}
} catch (IOException e) {
log.error("", e);
}
}
// /**
// * 更新文档信息
// */
// public void updateDocument() {
// try {
// // 创建索引请求对象
// UpdateRequest updateRequest = new UpdateRequest("mydlq-user", "doc", "1");
// // 设置员工更新信息
// UserInfo userInfo = new UserInfo();
// userInfo.setSalary(200.00f);
// userInfo.setAddress("北京市海淀区");
// // 将对象转换为 byte 数组
// byte[] json = JSON.toJSONBytes(userInfo);
// // 设置更新文档内容
// updateRequest.doc(json, XContentType.JSON);
// // 执行更新文档
// UpdateResponse response = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
// log.info("创建状态:{}", response.status());
// } catch (Exception e) {
// log.error("", e);
// }
// }
/**
* 删除文档信息
*/
public void deleteDocument() {
try {
// 创建删除请求对象
DeleteRequest deleteRequest = new DeleteRequest("mydlq-user", "doc", "1");
// 执行删除文档
DeleteResponse response = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
log.info("删除状态:{}", response.status());
} catch (IOException e) {
log.error("", e);
}
}
}
后续会在下一章写明springboot Java High Level REST Client 整合调用