ELasticSerach 7.9.2安装过程
1.windows下总安装文件
分为以下步骤
ELasticSerach 搜索引擎
ELasticSerach-head 可视化界面
kiBana 请求器
ik 分词器
相关华为镜像下载地址:
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
1.1 ELasticSerach
下载地址
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
出现闪退的原因
一种是内存过大,则需要调整
config/jvm.options
另一种原因则
config/elasticSerach.yml
在该文件下添加以下命令
xpack.ml.enabled: false
1.2 elasticsearch-head-master 可视化界面
下载地址:https://github.com/mobz/elasticsearch-head
在目录下安装即可
cnpm install
npm run start
解决跨域问题
则在ElasticSearch目录下
config/elasticSerach.yml
添加
http.cors.enabled: true
http.cors.allow-origin: "*"
1.3 kibana-7.9.2-windows-x86_64
下载地址
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
修改目录config/kibana.yml
`i18n.locale: “zh-CN”
1.4 ik分词器
下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/tags
注意版本要跟ElasticSearch一致
采用倒排排序,先找词再找文档。
直接把文件目录放在elasticsearch目录下的plugins里,新建ik文件夹,重开
elasticsearch即可自动加入插件
需要添加自己定义的分词库
则在
ik/config/IKAnalyzer.cfg.xml添加
并自定义建立dic文件
ELasticSerach 核心概念
与传统数据库对应
传统数据库 | ES |
---|---|
数据库 | 索引 |
表 | 类型 |
记录 | 文档 |
属性 | 域 |
并且采用的是倒排排序。
Rest风格
请求方法 | url | 说明 |
---|---|---|
PUT | /索引名/类型名/文档名 | 新建 |
POST | /索引名/类型名/文档名_update | 更新 |
GET | /索引名/类型名/文档名 | 搜索 |
DELETE | /索引名/类型名/文档名 | 删除 |
GET | /索引名/类型名/_search | 复合搜索 |
PUT | /索引名/类型名/文档名 | 更新 |
命令
- 基础
PUT /index/_doc/1
{
“name” : “czx”,
“ago” : 23
}
// 创建文档,_doc为默认文档类型
PUT /index/
{
“mappings” :{
properties:{
name:{
“type”:“text”
}
}
}
}
// 设置相应的字段
POST /index/_doc/1_update
{
“doc”:{
“name” : “czx”
}
}
// 修改相应的字段
GET /index/_doc/1
// 获取该索引
GET /cat_health
// 获取健康值
DELETE /index/_doc/1
DELETE /index/
// 删除
- 高级
1.基础查询
2.高级查询
整合spring-boot 常用API
引入依赖,版本要跟elasticsearch要一致
<properties>
<elasticsearch.version>7.9.2</elasticsearch.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
撰写配置类,本次采用的是RestHighLevelClient
@Configuration
public class ElasticSearchConfiguration {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
新建user、索引api、文档api
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
private String name;
private Integer ago;
}
package com.xc.springboot_es_jpa;
import com.alibaba.fastjson.JSON;
import com.xc.springboot_es_jpa.entity.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
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.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
@SpringBootTest
class SpringbootEsJpaApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
// 索引
// xxxindexRquest Create Get Delete
// RestHighLevelClient.indices(). exist get delete
@Test
void createIndex() throws IOException {
CreateIndexRequest createIndexRequest = new CreateIndexRequest("student");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
// 获得索引
// GetIndexRequst
// indeices().exists()
@Test
void getIndex() throws IOException{
GetIndexRequest getIndexRequest = new GetIndexRequest("spring-boot");
Boolean judege = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(judege);
}
// 删除索引
// DeleteIndexRequest
@Test
void DeleteIndex() throws IOException{
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("spring-boot");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
// 文档
// IndexRequst source id timeout
//
// restHighLevelClient.index
@Test
void creteDoc() throws IOException{
IndexRequest student = new IndexRequest("student");
User user = new User("czx",23);
student.id("1");
student.source(JSON.toJSONString(user),XContentType.JSON);
student.timeout("1s");
restHighLevelClient.index(student,RequestOptions.DEFAULT);
}
// 获取文档
// GetRequest
@Test
void getDoc() throws IOException{
GetRequest getRequest = new GetRequest("student");
getRequest.id("1");
// 不获取返回的_source的上下文
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields.toString());
System.out.println(documentFields.getSource().toString());
System.out.println(documentFields.getSourceAsString());
}
// 更新
// UpdateRequest
// UpdateRequest.doc
@Test
void updateDoc() throws IOException{
UpdateRequest updateRequest = new UpdateRequest("student", "1");
User user = new User("czx",24);
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
}
// 删除
// DeleteRequest
// delete
@Test
void deleteDoc() throws IOException{
DeleteRequest deleteRequest = new DeleteRequest("student");
deleteRequest.id("1");
restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);
}
@Test
//批量添加
void bulkDoc() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
ArrayList<User> users = new ArrayList<>();
users.add(new User("czx1",21));
users.add(new User("czx2",21));
users.add(new User("czx3",21));
users.add(new User("czx4",21));
users.add(new User("czx5",21));
for(int i = 0 ; i < users.size() ; i++){
bulkRequest.add(new IndexRequest("student")
.id(""+i)
.source(JSON.toJSONString(users.get(i)),XContentType.JSON));
}
BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkResponse.status());
}
// 高级查询
// SearchRequest 查询
// SearchSourceBuilder 结果
// QueryBuilders 条件
@Test
void searchDoc() throws IOException {
SearchRequest searchRequest = new SearchRequest("student");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// QueryBuilders.termQuery();
// QueryBuilders.matchAllQuery();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","czx1");
searchSourceBuilder.query(termQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
System.out.println(JSON.toJSONString(hits.getHits()));
System.out.println("======================");
}
}