ElasticSearch基础
1.基础
- 开箱即用,解压即可
- 在bin目录下启动ElasticSearch
- 访问localhost:9200 可以看到下面的内容
2. 安装与使用可视化插件
-
head插件,依赖于Node.Js
-
安装ElasticSearch-head,在解压的目录下运行 cmd,输入 cnpm install 等待安装完毕
-
安装完毕后,使用命令 npm run start 启动
-
由于我们的插件的端口为 9100,与ElasticSearch不同,产生了跨域的问题,要在ElasticSearch的配置文件中配置跨域
-
配置跨域
-
在ElasticSearch文件夹下的/conf/elasticsearch.yaml中配置
-
http.cors.enabled: true http.cors.allow-origin: "*"
-
重启ElasticSearch
-
-
正常启动如下
3. 安装Kibana
-
Kibana 版本要和 ES 一致
-
解压完毕,启动测试
-
在 /bin 目录下的kibana.bat文件
-
默认端口为localhost:5601
-
访问kibana
-
国际化(汉化)
-
在kibana目录下的 \x-pack\plugins\translations\translations 可以看到
-
我们在 /conf 目录下的的kibana.yml中配置
-
i18n.locale: "zh-CN"
-
重启kibana即可!
-
4. ES的核心概念
-
ES是面向文档的,一切都是 JSON (文档就是我们的数据)
-
elasticsearch在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移
- 单个节点由于物理机硬件限制,存储的文档是有限的,如果一个索引包含海量文档,则不能在单个节点存储。ES提供分片机制,同一个索引可以存储在不同分片(数据容器)中,这些分片又可以存储在集群中不同节点上
-
一个人就是一个集群,默认的集群名称就是 ElasticSearch
-
索引就是数据库
-
重要步骤
5. IK分词器插件
-
IK分词器包括 ik_max_word 和 ik_smart
- ik_max_word会将文本做最细粒度的拆分
- ik_smart 会做最粗粒度的拆分(最少切分)
-
安装
-
在Kibana中测试不同的分词器效果
-
最少切分
-
最细粒度切分,穷尽所有可能
-
-
IK分词器的字典没有一些自定义的词,需要我们自己加到我们的分词器的字典中
-
比如,我们测试 山人西来 这个词
-
在ik分词器的conf中找到 IKAnalyzer.ofg.xml配置
-
在conf中,我们写一个自己的字典,叫 mydic.dic,编辑,写入山人西来
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">mydic.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
-
-
重启ES,可以看到加载了我们的自定义字典
-
可以看到,我们自定义的 山人西来 已经被认为是一个词了
6. Rest 风格说明
-
RestFul风格是一种软件架构风格,而不是标准an,只是提供了一组设计原则和约束条件
-
method URL地址 描述 PUT localhost:9200/索引名称/类型名称/文档 id 创建文档(指定文档 id) POST localhost:9200/索引名称/类型名称 创建文档(随机文档 id) POST localhost:9200/索引名称/类型名称/文档 id/_update 修改文档 DELETE localhost:9200/索引名称/类型名称/文档 id 删除文档 GET localhost:9200/索引名称/类型名称/文档 id 通过文档 id 查询文档 POST localhost:9200/索引名称/类型名称/_search 查询所有的数据
7. 关于索引的基本操作
-
创建一个索引
-
指定自己的数据类型 (这里是配置好数据的类型)
-
PUT /索引名 { "mappings": { "properties": { 字段: { "type": 指定数据类型 } } } }
-
可以通过GET请求得到具体的信息
-
查看默认的信息
-
注意,在 ES 8 之后,type会被启用,这里默认为_doc,可以显式的声明,也可以不写!
-
查看默认信息
-
如果自己的文档的字段没有指定,那么ES就会给我们默认的配置字段类型
-
通过 GET _cat/ 可以查看当前的ES的很多信息
-
-
修改索引
-
提交还是使用PUT即可,然后覆盖 (方法1)
-
缺点: 如果漏写了字段,那么该字段会变成空!
-
使用POST _update,要指定一个字段"doc" (推荐)
-
8. 关于文档的基本操作
1. 基本操作
2. 进阶操作
1. 构建查询
2. 排序
- desc 降序,asc 升序
3. 分页
数据索引下标还是从 0 开始的,和学的所有的数据结构是一样的!
4. 布尔值查询
可以通过布尔值进行多条件精确查询
-
must命令 ==> 所有的条件都要符合 (and)
-
should命令 ==> 只要有一条满足即可 (or)
-
must_not命令 ==> 不符合条件才可以 (not)
5. 过滤 (区间)
-
gte ==> 大于等于 (gt 大于)
-
lte ==> 小于等于(lt 小于)
-
eq ==> 等于
6. 匹配多个条件
多个条件之间使用空格隔开即可,只要满足其中一个结果就可以被查出,这时候可以通过分值进行基本的判断