Elasticsearch基础学习
集群·节点·索引·类型·文档·分片·映射
elasticsearch是面向文档关系行数据库和elasticsearch客观的对比!一切都是json
Relational DB | Elaticsearch |
数据库(Database) | 索引(indices) |
表(tables) | types |
行(rows) | documents |
字段(columns) | fields |
elasticsearch中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)。
elasticsearch在后台把每个索引划分成多个分片,每哥分片可以在集群中不同的服务器中间之前迁移
索引是映射类型的容器,elasticsearch中的索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置。然后它们被存储到各个分片上了。
倒排索引
elasticsearch使用的是一种称为倒排索引的结构,采用lucene倒排索引作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,
对于每一个词,都有一个包含它的文档列表。例如现在有两根文档。
Study every day, day day up。 # 文档1包含的内容
Forever,study every day, good life。# 文档2包含的内容
term | doc_1 | doc_2 |
Study | ✔ | × |
Forever | × | ✔ |
every | ✔ | ✔ |
study | × | ✔ |
day | ✔ | ✔ |
up | ✔ | × |
good | × | ✔ |
life | × | ✔ |
现在搜索 good life
只有文档2两个条件都满足,所以文档2的权重更高。
完全过滤掉无关的所有数据,来提高效率。
elasticsearch索引是由多个lucene索引组成的。
IK分词器插件
分词器:即使把一段中文或者别的划分成一个个的关键字,我们在搜索的时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行匹配操作
默认的中文分词是每个字看成一个词。
下载
https://github.com/medcl/elasticsearch-analysis-ik
放入elasticsearch的插件里(注意版本对应)
elasticsearch-plugins
重启es
elasticsearch-plugin list 查看加载的插件
ik_smart(最少切分)
在kibana的开发工具上
GET _analyze
{
"analyzer": "ik_smart",
"text": "文本输入"
}
ik_max_word(最细粒度划分)(穷尽词库的可能!)
GET _analyze
{
"analyzer": "ik_max_word",
"text": "文本输入"
}
被拆开的词,需要自己加到分词器中
到elasticsearch-plugins/ik/config
IKAnalyzer.cfg.xml里面写
创建一个ding.dic 加入自己写的词,然后在IKAnalyzer.cfg.xml里加入扩展字典,就有我们自己的字典了。
重启ES
Rest风格说明
method | URL | 描述 |
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档 |
POST | localhost:9200/索引名称/类型名称 | 创建文档 |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
POST | localhost:9200/索引名称/类型名称/文档id/_search | 查询所有数据 |
PUT /索引名/~类型名字~/文档id
{请求体}
PUT /test1/type1/1
{
"name": "基础学习",
"age": 3
}
{
"_index" : "test1", #创建的库
"_type" : "type1", #类型
"_id" : "1", #id
"_version" : 1, #版本没有更新过就是1
"result" : "created", #创建状态
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
完全了自动增加索引。
那么name这个字段用不用指定类型呢,关系型数据库都要指定类型
字符串类型
text·keyword
数值类型
long·integer·short·byte·double·float·half float·scaled float
日期类型
date
布尔值类型
boolean
二进制类型
binary
等
关于索引的基本操作
创建索引规则
获取规则!通过GET请求
查看默认的信息
如果自己的文档没有指定,那么es就会给我们默认配置字段类型!
扩展:通过命令elasticsearch索引情况!
修改索引!覆盖值
修改了之后版本号会增加
现在的修改办法
删除索引
参考
https://www.bilibili.com/video/BV17a4y1x7zq?p=9