最全Elasticsearch 教程_elasticsearch怎么启动(2)

        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

####  1.1.2 配置 application.yml 文件



server:
port: 9000
Spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/es_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123

开启驼峰命名匹配映射

mybatis:
configuration:
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 创建索引实现/查询索引



package com.example.lucenedemo.test;

import com.example.lucenedemo.pojo.JobInfo;
import com.example.lucenedemo.service.JobInfoService;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.;
import org.apache.lucene.index.
;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;
import java.io.IOException;
import java.util.List;

@SpringBootTest
public class LuceneTests {

@Autowired
private JobInfoService jobInfoService;

@Test
public void createIndex() throws IOException { // 数据库中查询数据、给其建立索引
    // 1.指定索引文件存储位置:
    Directory directory = FSDirectory.open(new File("E:/B/index(23-07-03)"));

    // 2.配置分词器
    // Lucene 提供的标准分词器
    // Analyzer analyzer = new StandardAnalyzer();
    // IK分词器
    Analyzer analyzer = new IKAnalyzer();
    // 指定分词器版本,Version.LATEST 表示最新
    IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);

    // 3.创建一个用来写入索引的数据对象:IndexWriter
    // 参数1:索引写入的目标文件位置,参数2:表示按照哪一个分词器写出数据
    IndexWriter indexWriter = new IndexWriter(directory, config);
    // 删除指定目录下所有的索引数据
    indexWriter.deleteAll();

    // 4.从MySql数据库中查询到的数据,交给Lucene写入index目录下,并同时创建索引
    List<JobInfo> jobInfos = jobInfoService.selectAll();
    // 循环遍历集合
    for (JobInfo jobInfo : jobInfos) {
        // 创建文档对象:Document是用来存储数据库中的一条数据
        Document document = new Document();
        // document 总添加field(数据库字段信息):数据类型、取值
        /**
         * 字段类型:stord是否存储。YES表示永久在索引库中存储,NO:表示不永久保存
         */
        document.add(new LongField("id",jobInfo.getId(), Field.Store.YES));

        document.add(new TextField("companyName",jobInfo.getCompanyName(),Field.Store.YES));
        document.add(new TextField("companyAddr",jobInfo.getCompanyAddr(),Field.Store.YES));

        document.add(new IntField("SalaryMin",jobInfo.getSalaryMin(),Field.Store.YES));
        document.add(new IntField("salaryMax",jobInfo.getSalaryMax(),Field.Store.YES));

        document.add(new StringField("url",jobInfo.getUrl(),Field.Store.YES));
        document.add(new StringField("time",jobInfo.getTime(),Field.Store.YES));

        // 将当前的document文档写入索引库中
        indexWriter.addDocument(document);
    }
    // 关闭资源
    indexWriter.close();
}

@Test
// 查询索引
public void queryIndex() throws IOException {
    // 1.指定文件位置
    Directory directory = FSDirectory.open(new File("E:/B/index(23-07-03)"));

    // 2,创建一个读取索引文件数据的对象
    IndexReader indexReader = DirectoryReader.open(directory);

    // 3.创建一个搜索索引中数据的对象
    IndexSearcher indexSearcher = new IndexSearcher(indexReader);

    // 4.创建一个被查询的Term:词。制定了被搜索的内容、取值
    Query query = new TermQuery(new Term("companyName", "北京"));
    // 通过IndexSearcher来完成
    TopDocs search = indexSearcher.search(query, 10);
    System.out.println("符合条件的文档总数:" + search.totalHits);
    System.out.println("maxScore:" + search.getMaxScore());
    System.out.println("======================");
    for (ScoreDoc scoreDoc : search.scoreDocs) {
        // 获取文档的id
        int doc = scoreDoc.doc;
        Document document = indexSearcher.doc(doc);
        System.out.println("id:" + document.get("id"));
        System.out.println("companyName:" + document.get("companyName"));
        System.out.println("salaryMax:" + document.get("salaryMax"));
        System.out.println("time:" + document.get("time"));
        System.out.println("url:" + document.get("url"));
        System.out.println("======================");
    }

// indexReader.close();
}
}


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



com.janeluo ikanalyzer 2012_u6 ```

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 行之间)。

# Mac系统下配置⽅式
path.data: /Users/yuanxin/Documents/ProgramSoftware/es-config/es-9000/data
path.logs: /Users/yuanxin/Documents/ProgramSoftware/es-config/es-9000/logs

# Windows系统下配置⽅式
path.data: D:\es-config\es-9000\data
path.logs: D:\es-config\es-9000\logs

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

2.2 Elasticsearch启动

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

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

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

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

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

{
 "name" : "M76Rype",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "FOOWRqrPQVGF5jRlUX7H2Q",
 "version" : {
 "number" : "6.2.4",
 "build_hash" : "ccec39f",
 "build_date" : "2018-04-12T20:37:28.497551Z",
 "build_snapshot" : false,
 "lucene_version" : "7.2.1",
 "minimum_wire_compatibility_version" : "5.6.0",
 "minimum_index_compatibility_version" : "5.0.0"
 },
 "tagline" : "You Know, for Search"
}

2.3 Elasticsearch启动失败部分原因

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

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

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

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

-Xms256m
-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行左右)。

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

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

# Mac系统下启动Kibana⽅式 - 在终端执⾏下⾯的⽂件
./kibana
# Windows系统下启动Kibana⽅式 - 双击下⾯的⽂件运⾏
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进⾏测试。

GET /_analyze
{
 "analyzer": "ik_max_word",
 "text": "我是中国⼈"
}

2.运⾏得到以下结果。

{
 "tokens": [
 {
 "token": "我",
 "start_offset": 0,
 "end_offset": 1,
 "type": "CN_CHAR",
 "position": 0
 },
 {
 "token": "是",
 "start_offset": 1,
 "end_offset": 2,
 "type": "CN_CHAR",
 "position": 1
 },
 {
 "token": "中国⼈",
 "start_offset": 2,
 "end_offset": 5,
 "type": "CN_WORD",
 "position": 2
 },
 {
 "token": "中国",
 "start_offset": 2,
 "end_offset": 4,
 "type": "CN_WORD",
 "position": 3
 },
 {
 "token": "国⼈",
 "start_offset": 3,
 "end_offset": 5,
 "type": "CN_WORD",
 "position": 4
 }
 ]
}

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

GET /_analyze
{
 "analyzer": "ik_smart",
 "text": "我是中国⼈"
}

4.运⾏得到以下结果。

{
 "tokens": [
 {
 "token": "我",
 "start_offset": 0,
 "end_offset": 1,
 "type": "CN_CHAR",
 "position": 0
 },
 {
 "token": "是",
 "start_offset": 1,
 "end_offset": 2,
 "type": "CN_CHAR",
 "position": 1
 },
 {
 "token": "中国⼈",
 "start_offset": 2,
 "end_offset": 5,
 "type": "CN_WORD",
 "position": 2
 }
 ]
}

3 使⽤Kibana对索引库操作

3.1 索引基本操作

3.1.1 创建索引库
1.创建索引库语法

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

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

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

2.使⽤Kibana创建索引库

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

PUT /库名

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


 "acknowledged": true,
 "shards_acknowledged": true,
 "index": "库名"
}
3.1.2  查看索引库

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

GET /索引库名

响应结果⻅下:

{
 "库名": {
 "aliases": {},
 "mappings": {},
 "settings": {
 "index": {
 "creation_date": "1670332544067",
 "number_of_shards": "5",
 "number_of_replicas": "1",
 "uuid": "RQ2CUAEGR4uofhmgJIsNKg",
 "version": {
 "created": "6020499"
 },
 "provided_name": "库名"
 }
 }
 }
}
3.1.3 删除索引库

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

DELETE /索引库名

响应结果⻅下:

{
 "acknowledged": true
}

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

4.1 创建字段映射

4.1.1 创建字段映射语法

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

PUT /索引库名/_mapping/typeName
{


![img](https://img-blog.csdnimg.cn/img_convert/cbd6f6efb21456d44b158b0d15430719.png)
![img](https://img-blog.csdnimg.cn/img_convert/7540385ae5c8d92f70fd06e20bde9e18.png)
![img](https://img-blog.csdnimg.cn/img_convert/be88e6eb8e45cc8f650762942caac321.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

99"
 },
 "provided_name": "库名"
 }
 }
 }
}
3.1.3 删除索引库

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

DELETE /索引库名

响应结果⻅下:

{
 "acknowledged": true
}

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

4.1 创建字段映射

4.1.1 创建字段映射语法

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

PUT /索引库名/_mapping/typeName
{


[外链图片转存中...(img-HbgbsDdt-1714804451691)]
[外链图片转存中...(img-Tsm4Yiok-1714804451692)]
[外链图片转存中...(img-4QhLDgy8-1714804451692)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

要合理创建 Elasticsearch(ES)索引,需要考虑以下几个方面: 1. 确定索引的名称:ES中的索引名称应该简洁明了,能够清楚地表达索引的用途或内容。 2. 确定索引的字段:确定需要存储的字段以及字段的类型。在创建索引时,需要指定每个字段的映射类型,包括文本、数字、日期等等。 3. 确定分片和副本:根据数据量和查询负载来确定分片和副本的数量,以实现最佳性能和可用性。 4. 配置索引分析器:ES中的分析器用于将文本字段拆分成单词,并将这些单词标准化以便于搜索。可以根据需要配置合适的分析器。 5. 配置索引设置:根据需要配置索引的相关设置,包括存储大小、写入限制、刷新间隔等等。 6. 优化索引性能:可以通过调整索引缓存、启用压缩、设置合理的索引刷新间隔等方式来优化索引性能。 创建索引的基本语法如下: ``` PUT /索引名称 { "settings": { "number_of_shards": 分片数量, "number_of_replicas": 副本数量 }, "mappings": { "properties": { "字段名称": { "type": "字段类型" } } } } ``` 例如,创建一个名为“my_index”的索引,包含“title”和“content”两个字段,其中“title”为文本类型,而“content”为长文本类型,可以使用以下命令: ``` PUT /my_index { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text", "analyzer": "english" } } } } ``` 以上是创建索引的基本步骤和语法,根据实际需求,可以进一步配置索引的设置和优化性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值