Elasticsearch 教程_elasticsearch怎么启动(2)

查看映射关系

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

向索引库中添加⼀条数据

查询索引库中的数据

⼀次创建索引库和类型

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 依赖
<!-- 引入Lucene核心包及分词器包 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>4.10.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>4.10.3</version>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!-- Lombok工具 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- IK中文分词器 -->
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <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 中添加

<!-- IK中⽂分词器 -->
<dependency>
 <groupId>com.janeluo</groupId>
 <artifactId>ikanalyzer</artifactId>
 <version>2012_u6</version>
</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 行之间)。

# 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": {
 "属性名": "属性值"
 }
}


![img](https://img-blog.csdnimg.cn/img_convert/25f3a551e24c72e6822338cf528eb578.png)
![img](https://img-blog.csdnimg.cn/img_convert/61b0da94f7c1e4b8036fed2ebd7f310e.png)
![img](https://img-blog.csdnimg.cn/img_convert/cb6329410dc6cc5184448bfbeb1a365b.png)

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

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

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

offset": 5,
 "type": "CN_WORD",
 "position": 2
 }
 ]
}

3 使⽤Kibana对索引库操作

3.1 索引基本操作

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

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

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


[外链图片转存中...(img-5720Vg2O-1714229439017)]
[外链图片转存中...(img-2QJ7IbPk-1714229439018)]
[外链图片转存中...(img-nf0qt9OG-1714229439018)]

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

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

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

  • 14
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值