ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
ElasticSearch
下载ElasticSearch,最低支持jdk1.8
可视化界面elasticsearch-head
1.https://github.com/mobz/elasticsearch-head下载
2.安装下载依赖
下载完查看
3.启动并访问
发现连接不上,跨域问题(跨端口,跨网站等)
4.修改配置,设置跨域
添加
http.cors.enabled: true
http.cors.allow-origin: "*"
重新连接
kibana
1.下载,要和elastic版本对应
2.解压,解压有点慢
3.启动kibina ,在此之前还得启动elasticsearch
4.访问http://localhost:5601
5.可以选择汉化
保存后,重启kibana
ES核心概念
IK分词器
概念
下载
1.https://github.com/medcl/elasticsearch-analysis-ik
2.解压放到plugins
3.重启elasticserach
发现闪退。。。。
解决方案:
查看上图中的pom文件,发现对应的elasticsearch版本不对应,我们修改为7.6.1,保存,并通过下面的命令重新下载依赖并打包。
通过命令行进入ik分词pom所在目录下,依次输入
mvn clean
mvn compile
mvn package
最终会出现一个target目录,它里面的release下的zip文件就是我们所需要的啦
重新启动elasticsearch
正常启动了。
4重启kibana,测试
最细粒度
5.构建自己的字典
使得狂神说 成为一个词。
5.1新增一个 “cyx.dic”
5.2 把自己的dic 添加到配置中
5.3 重启 elasticsearch和kibana
加载了编写的dic
重新编译,这两个都把狂神说合在一起作为一个词
ES是针对Result风格的
Result风格
基本概念
基本测试
创建基本的索引
1打开kibana和9100 (npm run start)
2.kibana 添加
3.EShead查看
4.创建规则
文档的操作
基本操作
1.添加数据PUT
2.查询获取数据 GET
GET cyx/user/1
3.更新
3.1直接put修改
3.2 Post //*/_update
POST cyx/user/1/_update
{
"doc": {
"name": "王五"
}
}
3.3简单查询
GET cyx/user/_search?q=name:张三
复杂操作
集成springboot
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
用到的依赖主要就是上面的。
从新建空项目开始
1.新建elasticsearch空项目
2.新建模块 es-api ,添加依赖,主要添加这个
3.设置项目的javac,javascript等
4.修改
项目加载完成后,会发现elastic是6.8版本的
进入
会发现
所以在pom文件更改版本,这里的elasticsearch版本要和本地的版本一致,
首先修改springboot的版本,先更换为2.2.5
更新完之后,更改elastic版本
<elasticsearch.version>7.6.1</elasticsearch.version>
5…测试
5.1编写config配置类
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
5.2编写测试类
测试索引API
@SpringBootTest
class EsApiApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
public RestHighLevelClient client;
//测试索引的创建
@Test
void testCreateIndex() throws IOException {
//1创建索引请求
CreateIndexRequest request= new CreateIndexRequest("cyx_index");
//2客户端执行请求,请求后获得响应
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response);
}
}
进行测试
同时要开启elastic,elastic-heald,kibana,方便之后的测试进行观察,启动测试之后,发现已经添加了cyx_index的索引
//测试索引的是否存在
@Test
void testExistIndex() throws IOException {
GetIndexRequest request= new GetIndexRequest("cyx_index");
boolean exist = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exist);
}
测试一个不存在的
删除test1
查看确实没有了
//测试删除索引
@Test
void testDeleteIndex() throws IOException {
DeleteIndexRequest request= new DeleteIndexRequest("test1");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
测试文档API
1.添加文档
//测试添加文档
@Test
void testAddDocument() throws IOException {
//1创建对象
User user=new User("张三",25);
//2创建请求
IndexRequest request=new IndexRequest("cyx_index");
//3规则 put /cyx_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
//4将数据放到json
request.source(JSON.toJSONString(user), XContentType.JSON);
//5客户端发送请求,获取响应结果
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
System.out.println(response.status());
}
返回结果
IndexResponse[index=cyx_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=2,shards={"total":2,"successful":1,"failed":0}]
CREATED
2.测试文档是否存在
//测试文档是否存在
@Test
void testExistDocument() throws IOException {
GetRequest request= new GetRequest("cyx_index","1");
boolean exist = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exist);
}
3.测试获取文档
//测试获取文档
@Test
void testGetDocument() throws IOException {
GetRequest request= new GetRequest("cyx_index","1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
System.out.println(response);
}
{"age":25,"name":"张三"}
{"_index":"cyx_index","_type":"_doc","_id":"1","_version":1,"_seq_no":0,"_primary_term":2,"found":true,"_source":{"age":25,"name":"张三"}}
4.测试修改文档
//测试修改文档
@Test
void testUpdateDocument() throws IOException {
UpdateRequest request= new UpdateRequest("cyx_index","1");
request.timeout("1s");
User user = new User("王五", 55);
request.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println(response.status());
}
5.删除文档信息
//测试删除文档
@Test
void testDeleteDocument() throws IOException {
DeleteRequest request= new DeleteRequest("cyx_index","1");
request.timeout("1s");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
6.批量添加文档
//测试添加文档
@Test
void testBulkAddDocument() throws IOException {
BulkRequest request = new BulkRequest();
request.timeout("1s");
ArrayList<User> userlist=new ArrayList<User>();
userlist.add(new User("cyx1",5));
userlist.add(new User("cyx2",6));
userlist.add(new User("cyx3",40));
userlist.add(new User("cyx4",25));
userlist.add(new User("cyx5",15));
userlist.add(new User("cyx6",35));
//批量处理请求
for (int i = 0; i < userlist.size(); i++) {
request.add(
new IndexRequest("cyx_index")
.id(""+(i+1))
.source(JSON.toJSONString(userlist.get(i)),XContentType.JSON)
);
}
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.hasFailures());
}
7.搜索查询
//测试查询文档
@Test
void testSearchDocument() throws IOException {
SearchRequest request = new SearchRequest("cyx_index");
//构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.highlighter();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "cyx1");
sourceBuilder.query(termQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(response.getHits()));
System.out.println("=====================");
for (SearchHit documentFields : response.getHits().getHits()) {
System.out.println(documentFields.getSourceAsMap());
}
}
{"fragment":true,"hits":[{"fields":{},"fragment":false,"highlightFields":{},"id":"1","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":1.540445,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"cyx1","age":5},"sourceAsString":"{\"age\":5,\"name\":\"cyx1\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1}],"maxScore":1.540445,"totalHits":{"relation":"EQUAL_TO","value":1}}
=====================
{name=cyx1, age=5}