当前位置:   article > 正文

Elasticsearch 教程_elasticsearch怎么启动

elasticsearch怎么启动

目录

1 Lucene实现全⽂检索

1.1 项目部署

 1.1.1 导入 pox.xml 依赖

 1.1.2 配置 application.yml 文件

 1.1.3 创建实体类时可能出现的问题

 1.2 创建索引

1.2.1 创建索引实现/查询索引

2 ELK(Elasticsearch、Logstash、Kibana)使用

2.1 Elasticsearch安装配置和启动 

2.1.1 Elasticsearch版本 

2.1.1 Elasticsearch安装配置 

2.2 Elasticsearch启动 

2.3 Elasticsearch启动失败部分原因

2.4 安装Kibana 

2.4.1 Kibana下载安装 

2.4.2 Kibana配置运⾏ 

 2.4.3 Kibana控制台

 2.5 安装Head插件

2.5.1 elasticsearch-head安装 

2.6 安装IK分词器 

2.6.1 IK分词器安装 

2.6.2 IK分词器测试 

3 使⽤Kibana对索引库操作

3.1 索引基本操作

 3.1.1 创建索引库

 1.创建索引库语法

2.使⽤Kibana创建索引库 

3.1.2  查看索引库

3.1.3 删除索引库

4 使⽤kibana对类型及映射操作

4.1 创建字段映射 

4.1.1 创建字段映射语法 

4.2 kibana映射操作

查看映射关系 

查看某个索引库中的所有类型的映射

 向索引库中添加⼀条数据

 查询索引库中的数据

 ⼀次创建索引库和类型

5 kibana对⽂档操作

5.1 新增⽂档 

5.1.1 新增⽂档并随机⽣成id 

5.1.2 新增⽂档并⾃定义id 

5.2 查看⽂档

5.3 修改数据 

5.4 删除数据

6 查询

6.1 基本查询 

7 详情介绍 


1 Lucene实现全⽂检索

1.1 项目部署

 1.1.1 导入 pox.xml 依赖

  1. <!-- 引入Lucene核心包及分词器包 -->
  2. <dependency>
  3. <groupId>org.apache.lucene</groupId>
  4. <artifactId>lucene-core</artifactId>
  5. <version>4.10.3</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.lucene</groupId>
  9. <artifactId>lucene-analyzers-common</artifactId>
  10. <version>4.10.3</version>
  11. </dependency>
  12. <!-- 单元测试 -->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-test</artifactId>
  16. <scope>test</scope>
  17. </dependency>
  18. <!-- 热部署 -->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-devtools</artifactId>
  22. <scope>runtime</scope>
  23. <optional>true</optional>
  24. </dependency>
  25. <!-- Lombok工具 -->
  26. <dependency>
  27. <groupId>org.projectlombok</groupId>
  28. <artifactId>lombok</artifactId>
  29. <optional>true</optional>
  30. </dependency>
  31. <!-- IK中文分词器 -->
  32. <dependency>
  33. <groupId>com.janeluo</groupId>
  34. <artifactId>ikanalyzer</artifactId>
  35. <version>2012_u6</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-starter-test</artifactId>
  40. </dependency>

 1.1.2 配置 application.yml 文件

  1. server:
  2. port: 9000
  3. Spring:
  4. datasource:
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/es_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
  7. username: root
  8. password: 123
  9. # 开启驼峰命名匹配映射
  10. mybatis:
  11. configuration:
  12. map-underscore-to-camel-case: true

 1.1.3 创建实体类时可能出现的问题

说明:SpringBoot项⽬启动提示This primary key of "id" is primitive !不建议如此请使⽤包装类in Class: "com.yx.pojo.JobInfo"。

1.解决⽅法:

    使⽤包装类替换基本数据类型。将id字段封装成Long类型或Integer类型,具体选择什么类型取 决于数据库中该id字段的类型。

2.警告原因:

    如果⽤long的话id的默认值会是0,会出现⼀些问题,⽐如在MyBatis-Plus使⽤save()⽅法时就 不能使⽤算法⽣成id了,这样会⽣成id为0的数据,如果有唯⼀或者主键约束的话,下⼀次⽣成就会报错。 

 1.2 创建索引

1.2.1 创建索引实现/查询索引

  1. package com.example.lucenedemo.test;
  2. import com.example.lucenedemo.pojo.JobInfo;
  3. import com.example.lucenedemo.service.JobInfoService;
  4. import org.apache.lucene.analysis.Analyzer;
  5. import org.apache.lucene.document.*;
  6. import org.apache.lucene.index.*;
  7. import org.apache.lucene.search.*;
  8. import org.apache.lucene.store.Directory;
  9. import org.apache.lucene.store.FSDirectory;
  10. import org.apache.lucene.util.Version;
  11. import org.junit.jupiter.api.Test;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.boot.test.context.SpringBootTest;
  14. import org.wltea.analyzer.lucene.IKAnalyzer;
  15. import java.io.File;
  16. import java.io.IOException;
  17. import java.util.List;
  18. @SpringBootTest
  19. public class LuceneTests {
  20. @Autowired
  21. private JobInfoService jobInfoService;
  22. @Test
  23. public void createIndex() throws IOException { // 数据库中查询数据、给其建立索引
  24. // 1.指定索引文件存储位置:
  25. Directory directory = FSDirectory.open(new File("E:/B/index(23-07-03)"));
  26. // 2.配置分词器
  27. // Lucene 提供的标准分词器
  28. // Analyzer analyzer = new StandardAnalyzer();
  29. // IK分词器
  30. Analyzer analyzer = new IKAnalyzer();
  31. // 指定分词器版本,Version.LATEST 表示最新
  32. IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
  33. // 3.创建一个用来写入索引的数据对象:IndexWriter
  34. // 参数1:索引写入的目标文件位置,参数2:表示按照哪一个分词器写出数据
  35. IndexWriter indexWriter = new IndexWriter(directory, config);
  36. // 删除指定目录下所有的索引数据
  37. indexWriter.deleteAll();
  38. // 4.从MySql数据库中查询到的数据,交给Lucene写入index目录下,并同时创建索引
  39. List<JobInfo> jobInfos = jobInfoService.selectAll();
  40. // 循环遍历集合
  41. for (JobInfo jobInfo : jobInfos) {
  42. // 创建文档对象:Document是用来存储数据库中的一条数据
  43. Document document = new Document();
  44. // document 总添加field(数据库字段信息):数据类型、取值
  45. /**
  46. * 字段类型:stord是否存储。YES表示永久在索引库中存储,NO:表示不永久保存
  47. */
  48. document.add(new LongField("id",jobInfo.getId(), Field.Store.YES));
  49. document.add(new TextField("companyName",jobInfo.getCompanyName(),Field.Store.YES));
  50. document.add(new TextField("companyAddr",jobInfo.getCompanyAddr(),Field.Store.YES));
  51. document.add(new IntField("SalaryMin",jobInfo.getSalaryMin(),Field.Store.YES));
  52. document.add(new IntField("salaryMax",jobInfo.getSalaryMax(),Field.Store.YES));
  53. document.add(new StringField("url",jobInfo.getUrl(),Field.Store.YES));
  54. document.add(new StringField("time",jobInfo.getTime(),Field.Store.YES));
  55. // 将当前的document文档写入索引库中
  56. indexWriter.addDocument(document);
  57. }
  58. // 关闭资源
  59. indexWriter.close();
  60. }
  61. @Test
  62. // 查询索引
  63. public void queryIndex() throws IOException {
  64. // 1.指定文件位置
  65. Directory directory = FSDirectory.open(new File("E:/B/index(23-07-03)"));
  66. // 2,创建一个读取索引文件数据的对象
  67. IndexReader indexReader = DirectoryReader.open(directory);
  68. // 3.创建一个搜索索引中数据的对象
  69. IndexSearcher indexSearcher = new IndexSearcher(indexReader);
  70. // 4.创建一个被查询的Term:词。制定了被搜索的内容、取值
  71. Query query = new TermQuery(new Term("companyName", "北京"));
  72. // 通过IndexSearcher来完成
  73. TopDocs search = indexSearcher.search(query, 10);
  74. System.out.println("符合条件的文档总数:" + search.totalHits);
  75. System.out.println("maxScore:" + search.getMaxScore());
  76. System.out.println("======================");
  77. for (ScoreDoc scoreDoc : search.scoreDocs) {
  78. // 获取文档的id
  79. int doc = scoreDoc.doc;
  80. Document document = indexSearcher.doc(doc);
  81. System.out.println("id:" + document.get("id"));
  82. System.out.println("companyName:" + document.get("companyName"));
  83. System.out.println("salaryMax:" + document.get("salaryMax"));
  84. System.out.println("time:" + document.get("time"));
  85. System.out.println("url:" + document.get("url"));
  86. System.out.println("======================");
  87. }
  88. // indexReader.close();
  89. }
  90. }

 中⽂分词器已在 pom.xml 中添加

  1. <!-- IK中⽂分词器 -->
  2. <dependency>
  3. <groupId>com.janeluo</groupId>
  4. <artifactId>ikanalyzer</artifactId>
  5. <version>2012_u6</version>
  6. </dependency>

2 ELK(Elasticsearch、Logstash、Kibana)使用

2.1 Elasticsearch安装配置和启动 

2.1.1 Elasticsearch版本 

⽬前Elasticsearch最新的版本是8.x,企业内⽬前⽤的⽐较多是6.x,我们以6.2.4进⾏讲解,需要JDK 1.8及以上版 本。为了快速看到效果我们直接在本地操作系统上安装Elasticsearch。 

2.1.1 Elasticsearch安装配置 

1.在Elasticsearch官⽹下载https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-2-4的是zip格式 的Elasticsearch安装包(⽆论Window系统还是Mac系统)。

2.将下载的elasticsearch-6.2.4.zip压缩包解压到任意⼀个没有中⽂没有空格的⽬录下。

3.在任意⼀个没有中⽂没有空格的⽬录下创建es-config⽬录,并在该⽬录下创建es-9000⽬录,最后在es-9000⽬ 录下创建data和logs⽬录。 

4.修改Elasticsearch索引数据和⽇志数据存储的路径。打开elasticsearch-6.2.4/config/⽬录下的elasticsearch.yml 配置⽂件进⾏路径的配置(大概在 30~40 行之间)。 

  1. # Mac系统下配置⽅式
  2. path.data: /Users/yuanxin/Documents/ProgramSoftware/es-config/es-9000/data
  3. path.logs: /Users/yuanxin/Documents/ProgramSoftware/es-config/es-9000/logs
  4. # Windows系统下配置⽅式
  5. path.data: D:\es-config\es-9000\data
  6. path.logs: D:\es-config\es-9000\logs

说明:操作系统不同,Paths的路径配置有区别,以上两种⽅式根据本地操作系统⼆选其⼀。

2.2 Elasticsearch启动 

1.进⼊elasticsearch-6.2.4/bin/⽬录下通过启动⽂件来启动Elasticsearch。 

  1. # Mac系统下启动Elasticsearch⽅式 - 在终端执⾏下⾯的⽂件
  2. ./elasticsearch
  3. # Windows系统下启动Elasticsearch⽅式 - 双击下⾯的⽂件运⾏
  4. elasticsearch.bat

2.启动成功后,终端将输出以下的信息。可以看到绑定了两个端⼝。

  • 9300:集群节点间通讯接⼝,接收TCP协议。
  • 9200:客户端访问接⼝,接收HTTP协议。 

 3.我们在浏览器中访问http://127.0.0.1:9200地址进⾏测试,如果看到以下结果表示Elasticsearch启动成功。

  1. {
  2. "name" : "M76Rype",
  3. "cluster_name" : "elasticsearch",
  4. "cluster_uuid" : "FOOWRqrPQVGF5jRlUX7H2Q",
  5. "version" : {
  6. "number" : "6.2.4",
  7. "build_hash" : "ccec39f",
  8. "build_date" : "2018-04-12T20:37:28.497551Z",
  9. "build_snapshot" : false,
  10. "lucene_version" : "7.2.1",
  11. "minimum_wire_compatibility_version" : "5.6.0",
  12. "minimum_index_compatibility_version" : "5.0.0"
  13. },
  14. "tagline" : "You Know, for Search"
  15. }

2.3 Elasticsearch启动失败部分原因

解决的⽅法是:修改虚拟机内存的⼤⼩。 

1.找到elasticsearch-6.2.4/config/下的jvm.options配置⽂件,默认Xms和Xmx的初始值都为1G。 

  • Xms是指设定程序启动时占⽤内存⼤⼩。⼀般来讲,⼤点程序会启动的快⼀点,但是也可能会导致机器暂时变 慢。 
  • Xmx是指设定程序运⾏期间最⼤可占⽤的内存⼤⼩。如果程序运⾏需要占⽤更多的内存,超出了这个设置 值,就会抛出OutOfMemory异常。

2.将Xms和Xmx的初始值进⾏修改,值都设置成256m。 

  1. -Xms256m
  2. -Xmx256m

 3.再重新通过启动⽂件来启动Elasticsearch进⾏测试。

2.4 安装Kibana 

2.4.1 Kibana下载安装 

1.Node.js安装 

 因为Kibana依赖于Node.js,需要在系统上先安装Node.js。具体Node.js的安装步骤在这⾥不展开讲解。

2.Kibana安装 

 1.访问https://www.elastic.co/cn/downloads/past-releases/kibana-6-2-4⽹址,根据操作系统下载对应的Kibana 安装包。注意下载的Kibana版本和Elasticsearch版本保持⼀致。

  •  Mac版:kibana-6.2.4-darwin-x86_64.tar.gz
  • Windows版:kibana-6.2.4-windows-x86_64.zip

2.将下载的Kibana压缩包解压到任意⼀个没有中⽂没有空格的⽬录下。 

2.4.2 Kibana配置运⾏ 

1.进⼊Kibana安装⽬录下的config⽬录,修改kibana.yml⽂件,添加Elasticsearch服务地址的配置(注释放开即 可。大概在21行左右)。 

  1. # The URL of the Elasticsearch instance to use for all your queries.
  2. elasticsearch.url: "http://localhost:9200"

 2.进⼊Kibana安装⽬录下的bin⽬录,通过运⾏启动⽂件来启动Kibana。前提是先启动Elasticsearch服务,再启动 Kibana服务。

  1. # Mac系统下启动Kibana⽅式 - 在终端执⾏下⾯的⽂件
  2. ./kibana
  3. # Windows系统下启动Kibana⽅式 - 双击下⾯的⽂件运⾏
  4. kibana.bat

 3.Kibana启动成功后⻅下。

  4.通过运⾏结果发现Kibana的监听端⼝是5601。然后访问http://127.0.0.1:5601地址进⾏测试。

 2.4.3 Kibana控制台

1.在Kibana控制台左侧菜单列表中选择【DevTools】选项,即可进⼊控制台⻚⾯。 

 2.在⻚⾯右侧,我们就可以输⼊请求,然后点击运⾏按钮,就可以访问Elasticsearch了。

 2.5 安装Head插件

2.5.1 elasticsearch-head安装 

elasticsearch-head的安装基于⾕歌浏览器进⾏介绍。 

1.通过https://fifiles.cnblogs.com/fifiles/sanduzxcvbnm/elasticsearch-head.7z⽹址下载elasticsearch-head.7z 压缩包。 

 2.将elasticsearch-head.7z解压到任意⼀个没有中⽂没有空格的⽬录下。

3.在⾕歌浏览器中点击【扩展程序】-【加载已解压的压缩程序】选项,找到elasticsearch-head⽂件夹,点击打开 即可进⾏安装。 

4.访问extension://ffmkiejjmecolpfloofpjologoblkegm/elasticsearch-head/index.html地址将看到以下 窗⼝表示安装成功。 

2.6 安装IK分词器 

IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases。 

2.6.1 IK分词器安装 

 1.访问https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.2.4地址下载IK分词器zip安装包。

2.将下载的elasticsearch-analysis-ik-6.2.4.zip的压缩包解压到elasticsearch-6.2.4/plugins/⽬录下,并将解压后的 ⽬录重命名成analysis-ik。 

 3.重新启动Elasticsearch服务即可加载IK分词器,然后再重启Kibana服务。

2.6.2 IK分词器测试 

1. IK分词器测试案例 

1.将analyzer分词器设置为ik_max_word进⾏测试。 

  1. GET /_analyze
  2. {
  3. "analyzer": "ik_max_word",
  4. "text": "我是中国⼈"
  5. }

 2.运⾏得到以下结果。

  1. {
  2. "tokens": [
  3. {
  4. "token": "我",
  5. "start_offset": 0,
  6. "end_offset": 1,
  7. "type": "CN_CHAR",
  8. "position": 0
  9. },
  10. {
  11. "token": "是",
  12. "start_offset": 1,
  13. "end_offset": 2,
  14. "type": "CN_CHAR",
  15. "position": 1
  16. },
  17. {
  18. "token": "中国⼈",
  19. "start_offset": 2,
  20. "end_offset": 5,
  21. "type": "CN_WORD",
  22. "position": 2
  23. },
  24. {
  25. "token": "中国",
  26. "start_offset": 2,
  27. "end_offset": 4,
  28. "type": "CN_WORD",
  29. "position": 3
  30. },
  31. {
  32. "token": "国⼈",
  33. "start_offset": 3,
  34. "end_offset": 5,
  35. "type": "CN_WORD",
  36. "position": 4
  37. }
  38. ]
  39. }

 3.将analyzer分词器设置为ik_smart进⾏测试。

  1. GET /_analyze
  2. {
  3. "analyzer": "ik_smart",
  4. "text": "我是中国⼈"
  5. }

 4.运⾏得到以下结果。

  1. {
  2. "tokens": [
  3. {
  4. "token": "我",
  5. "start_offset": 0,
  6. "end_offset": 1,
  7. "type": "CN_CHAR",
  8. "position": 0
  9. },
  10. {
  11. "token": "是",
  12. "start_offset": 1,
  13. "end_offset": 2,
  14. "type": "CN_CHAR",
  15. "position": 1
  16. },
  17. {
  18. "token": "中国⼈",
  19. "start_offset": 2,
  20. "end_offset": 5,
  21. "type": "CN_WORD",
  22. "position": 2
  23. }
  24. ]
  25. }

3 使⽤Kibana对索引库操作

3.1 索引基本操作

 3.1.1 创建索引库

 1.创建索引库语法

Elasticsearch采⽤RESTful⻛格API,因此其API就是⼀次HTTP请求,你可以⽤任何⼯具发起HTTP请求。

  • 请求⽅式: PUT
  • 请求路径: /索引库名
  • 请求参数: JSON格式
  1. {
  2. "settings": {
  3. "属性名": "属性值"
  4. }
  5. }

 settings:就是索引库设置,其中可以定义索引库的各种属性,⽬前我们可以不设置,都⾛默认。

2.使⽤Kibana创建索引库 

1.使⽤Kibana创建yx索引库。 

PUT /库名

 2.在Kibana的Console窗⼝点击绿⾊按钮发送请求,响应结果⻅下。

  1. "acknowledged": true,
  2. "shards_acknowledged": true,
  3. "index": "库名"
  4. }

3.1.2  查看索引库

GET请求可以帮我们查看索引信息,语法格式:

GET /索引库名

 响应结果⻅下:

  1. {
  2. "库名": {
  3. "aliases": {},
  4. "mappings": {},
  5. "settings": {
  6. "index": {
  7. "creation_date": "1670332544067",
  8. "number_of_shards": "5",
  9. "number_of_replicas": "1",
  10. "uuid": "RQ2CUAEGR4uofhmgJIsNKg",
  11. "version": {
  12. "created": "6020499"
  13. },
  14. "provided_name": "库名"
  15. }
  16. }
  17. }
  18. }

3.1.3 删除索引库

删除索引使⽤DELETE请求。语法格式: 

DELETE /索引库名

 响应结果⻅下:

  1. {
  2. "acknowledged": true
  3. }

4 使⽤kibana对类型及映射操作

4.1 创建字段映射 

4.1.1 创建字段映射语法 

语法格式:请求⽅式依然是PUT。 

  1. PUT /索引库名/_mapping/typeName
  2. {
  3. "properties": {
  4. "字段名": {
  5. "type": "类型",
  6. "index": true,
  7. "store": false,
  8. "analyzer": "分词器"
  9. }
  10. }
  11. }

如果yx索引库存在,响应结果⻅下: 

  1. {
  2. "acknowledged": true
  3. }

 注意:在进⾏创建索引库中的字段映射时,需要先确保索引库被创建,否则会抛 index_not_found_exception异常。

4.2 kibana映射操作

查看映射关系 

语法格式: 

GET /索引库名/_mapping
查看某个索引库中的所有类型的映射

如果要查看某个类型映射,可以在路径后⾯跟上类型名称。即:

GET /索引库名/_mapping/类型名
 向索引库中添加⼀条数据
PUT /索引库名/类型名/id
 查询索引库中的数据
GET /索引库名/_search
 ⼀次创建索引库和类型
  1. put /索引库名
  2. {
  3. "settings": {
  4. "索引库属性名": "索引库属性值"
  5. },
  6. "mappings": {
  7. "类型名": {
  8. "properties": {
  9. "字段名": {
  10. "映射属性名": "映射属性值"
  11. }
  12. }
  13. }
  14. }
  15. }

5 kibana对⽂档操作

5.1 新增⽂档 

5.1.1 新增⽂档并随机⽣成id 

语法格式:

  1. POST /索引库名/类型名
  2. {
  3. "key":"value"
  4. }

 另外,需要注意的是,在响应结果中有⼀个 _id 字段,这个就是这条⽂档数据的唯⼀标识,以后的增删改查都依赖 这个 id 作为唯⼀标识。这⾥我们新增时没有指定id,所以是ES帮我们随机⽣成的id。

5.1.2 新增⽂档并⾃定义id 

 语法格式:

  1. POST /索引库名/类型/id值
  2. {
  3. ...
  4. }

5.2 查看⽂档

根据Rest⻛格,新增是POST,查询是GET,不过查询⼀般都需要条件,这⾥我们把刚刚⽣成数据的id带上。 

 语法格式:

GET /库名索引/类型名称/id

_source:源⽂档信息,所有的数据都在⾥⾯。

_id:这条⽂档的唯⼀标识。 

5.3 修改数据 

PUT表示修改⽂档。不过修改必须指定id。分为以下两种情况:

  • 如果id对应的⽂档存在,则修改。
  • 如果id对应的⽂档不存在,则新增。 

 语法格式:

  1. PUT /库名索引/类型名称/id
  2. {
  3. ...
  4. }

 响应结果:可以看到输出结果中的result属性的取值为created ,表示是新增数据操作。

5.4 删除数据

  语法格式:

DELETE /索引库名/类型名/id值

6 查询

6.1 基本查询 

基本语法: 

  1. GET /索引库名/_search
  2. {
  3. "query": {
  4. "查询类型": {
  5. "查询条件": "查询条件值"
  6. }
  7. }
  8. }

 这⾥的query代表⼀个查询对象,⾥⾯可以有不同的查询属性。

  • 查询类型:例如match_all、match、term、range等。
  • 查询条件:查询条件会根据类型的不同,写法也有差异,后⾯详细讲解。 

7 详情介绍 

链接: https://pan.baidu.com/s/1AXfx7x_8Vx5bYMPYQzCU0g?pwd=ti74

提取码: ti74

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/508024
推荐阅读
相关标签
  

闽ICP备14008679号