ElasticSearch是基于java开发的Restful风格,依赖于jdk1.7以及以上版本,不过现在高版本的ElasticSearch都自带了jdk,所以不用关注本地jdk是否安装。
一、安装准备
1 下 载 ElasticSearch (数据库本身,类似mysql安装程序)
2 下 载 分词器ik (搜索分词器)
3 下 载 kibana (用于可视化操作,类似navicat)
1 下载ElasticSearch
下载地址: https://www.elastic.co/downloads

这个页面下拉框可以选择操作系统,默认window系统,不能选版本,默认最新版本。但最新版本9.2.0下载下来后我启动后没成功。如果需要下载历史低版本,在首页点击页面上方的【Docs】(文档)

点击View other versions(查看其他版本)

点击你需要的版本进去

点击Getting started with Elasticsearch最右边的箭头图标展开子目录,然后点击Get Elasticsearch up and running

我这边是本地window安装,所以选对应的window版本zip包进行下载
2 下载分词器
下载地址:https://release.infinilabs.com/analysis-ik/stable/

点击可直接下载下来zip包, 版本和ElasticSearch的版本保持一致
3 下载kibana
下载地址 :https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-windows-x86_64.zip
需要啥版本自行修改url 中的版本号进行下载
二、解压安装
2.1 安装和启动ElasticSearch

先把elasticsearch-7.6.2-windows-x86_64.zip 和 elasticsearch-analysis-ik-7.6.2.zip 进行解压,然后剪切elasticsearch-analysis-ik-7.6.2文件夹到elasticsearch-7.6.2的plugins文件下粘贴

然后回到elasticsearch-7.6.2/bin目录,双击elasticsearch.bat进行启动ElasticSearch数据库


启动没报错完成后, 在浏览器地址输入http://localhost:9200/ 测试是否启动成功
返回这个json说明启动成功了,访问不了说明启动失败。
2.2 启动失败处理
如果启动的黑窗口,过一会自动闪退关闭了,且http://localhost:9200/也打不开,说明没启动成功。查看log目录下的日志文件,去找原因


org.elasticsearch.ElasticsearchException: X-Pack is not supported and Machine Learning is not available for [windows-x86]; you can use the other X-Pack features (unsupported) by setting xpack.ml.enabled: false in elasticsearch.yml
比如这个错误提示和解决方法日志里面都说了,高版本的es需要安装X-Pack 插件(作用是负责用户认证安全方面),否则就修改配置文件关闭此功能。
去安装目录的config目录下,找到 elasticsearch.yml 文件, 在里面添加一行
xpack.ml.enabled: false
然后去重新点击 elasticsearch.bat 启动即可解决。
2.2 安装和启动kibana
先加压kibana-7.6.2-windows-x86_64.zip (用时会比较久,10w+个文件), 然后去到kibana-7.6.2-windows-x86_64/config目录,编辑kibana.yml

kibana.yml的配置项默认全部注释了,并有英文对每一个配置项目进行说明,具体配置含义参考官网说明 。 此处我们放开下面这几个即可
server.port: 5601 # 访问端口
server.host: "localhost" # 访问地址
server.name: "es-sever" # 服务名, 可以自行定义
elasticsearch.hosts: ["http://localhost:9200"] # elasticsearch服务器的地址
i18n.locale: "zh-CN" # 可视化页面使用中文

回到kibana-7.6.2-windows-x86_64/bin目录,双击kibana.bat启动(一开始是黑窗口无文字,启动过程也会慢,需一两分钟)

启动完成后,在浏览器访问http://localhost:5601

点击使用我的样例数据 或者 自己浏览 即可进入主页
三、简单的查询操作
3.1 进入数据操作界面

点击左下角的 箭头图标 菜单

点击左边倒数第三个图标 Dev Tools (滚动条往下拉才能看到)

左边这块区域是写操作语句的地方,类似navicat的窗口写select * from table。ElasticSearch 是非关系型数据库, 通过api来操作数据库。
若写错了左边的数字行会有红色的叉叉提示,比如 # 注释内容 ,可以单独写一行,不能放在 GET 这一行后面,也不能放在{} 里面的任何地方。此外,也具备语法提示,比如输入match_ 就会提示到 match_all 作为选项供你选择输入。
可以执行多个语句命令,但右边的返回数据展示窗口只展示最后一个语句命令的执行结果。

左上角的 历史记录 按钮,可以查询历史执行过的命令,鼠标悬停在上面就会展示右边命令的具体内容在右边。如需再次执行,点击右下角的应用按钮(并非点击无效,然后需手动关闭历史记录界面。所以只需点一次),命令内容就会自动写到了左边的窗口,然后点击 乱码按钮或者左上角的 历史记录 按钮,关闭/隐藏 历史执行记录界面
3.2 一个简单的增删改查示例
ElasticSearch 里面有索引index(等同mysql的表名称)、映射mapping(等同mysql的表结构)、文档doc(等同mysql的一行数据)这三个概念。所以先创建一个索引(表)yulisao,表字段(映射)包括name、age、barth三个字段(执行前请删掉 # 注释内容)
PUT /yulisao # 创建yulisao这个索引并同时添加映射
{
"mappings": {
"properties": {
"name": { # 字段名
"type": "text" # 数据类型
},
"age": {
"type": "integer"
},
"barth": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||epoch_millis" # 数据格式
}
}
}
}
新增数据
往yulisao这个表写入一条数据
# 添加一条数据
POST /yulisao/_doc/1 # 1 是文档ID,可以省略则自动生成一个长字符串
{
"name": "张三",
"age": 30,
"barth": "2025-01-01 12:12:12"
}
查询数据
查询yulisao这个表里面name=小王的数据
# 查询 {}里面的注释要删除掉在执行,不然报错
GET /yulisao/_search
{
"query": {
"match": {
"name": "小王"
} # 查询条件
},
"size": 5, # 查询多少条,可省略则返回全部
"_source": ["name", "age"] # 查哪几个字段返回, 可省略则返回全部字段
}
删除数据
把yulisao这个表里面id=1的数据删掉
DELETE /yulisao/_doc/1
------------------------------- 安装过程结束 ------------------------------------------
------------------------------- 以下步骤非必须 ---------------------------------------
四、设置ElasticSearch、kibana密码 (此步骤非必须)
如上操作完成后, 访问以下两个地址都是直接进入了,谁都可以进行访问是不安全的,因此可以可选性的设置账户密码进行访问
ElasticSearch:http://localhost:9200/
kibana:http://localhost:5601/
4.1 创建ElasticSearch内置用户
4.1.1 配置Elasticsearch安全功能
开启安全校验,编辑elasticsearch-7.6.2\config目录下的elasticsearch.yml文件,添加如下(添加后需重启elasticsearch生效, 双击elasticsearch-7.6.2\bin下的elasticsearch.bat)

xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
4.1.2 配置内置用户
elasticsearch-7.6.2\bin目录下打开powerShell命令窗口, 输入如下命令进行初始化内置用户(一般是会给初始化elastic、kibana、logstash_system、beats_system这几个用户,其中elastic是超级用户)
./elasticsearch-setup-passwords interactive


提示是否确认设置用户和密码,输入y进行确认,依次给这些账户设定密码(至少为6个字符),最后会提示密码已设置完成。然后验证一下,访问ElasticSearch :http://localhost:9200/ 就会提示进行身份验证了。

输入账户elastic和你设置的密码登录,看到json报文就说明用户验证成功。

4.1.3 配置kibana连接用户
kibana-7.6.2-windows-x86_64\config目录下的kibana.yml,编辑添加如下,然后重启kibana
elasticsearch.username: "kibana"
elasticsearch.password: "123456" # 你在elasticsearch设置的密码

4.1.4 验证kibana登录
此时kibana也需要进行登录

若登录后提示403错误,可以换超管账户elastic进行登录。(访问http://localhost:5601/logout 或者 重启kibana可以重新到登录界面)

五、IK分词器设置
5.1 ElasticSearch 搜索原理
ElasticSearch 的优势是模糊搜索,主要靠分词器(负责创建倒排索引时对文档分词+用户搜索时对输入的内容分词)。
先说下mysql 模糊搜索是全表扫描,然后逐条去判断是否包含关键词,若包含则把这条数据放结果集最后一起返回。
ElasticSearch 是数据存进的时候就把值进行了切割分词,登记在了分词表,里面记录了该分词和该文档id。这样查询的时候,对用户的关键词进行分词,然后拿这些分词依次去分词表里面搜索得到对应的文档id,最后把这些文档id去重得到结果集。

IK分词器模式:
ik_smart:智能切分,粗粒度。比如"中国人",就分割为"中国人"
ik_max_word:最细切分,细粒度。比如"中国人",分割为"中国","国人"
具体可以查看分词效果
GET /_analyze
{
"analyzer": "ik_max_word", # 分词模式
"text": "中国人" # 你的关键词
}
5.2 自定义分词
需求背景:
1、IK分词器对一些新生起的网络名词无法区分,比如"提灯定损"、"犀利哥" 以及新歌名电影名
2、禁止被搜索的信息,比如涉及政治、明星绯闻之类的关键词
设置方法
去IK的配置目录\elasticsearch-7.6.2\plugins\elasticsearch-analysis-ik-7.6.2\config下,编辑IKAnalyzer.cfg.xml文件


ext_dict标签:表示期望可以作为分词
ext_stopwords标签:表示禁止作为分词
在这两个标签之间自定义一个文件名称.dic,然后再通目录下创建该文件,里面写上你需要的分词

重启ElasticSearch,启动黑窗口也会打印日志显示加载你自定义的词典文件路径。这样"提灯定损"就可以作为一个关键词词汇进行分词登记和搜索了