文章目录
基础知识
elasticSearch是什么
elasticSearch基与lucece构建的 分布式的 RESTFUL接口的全文搜索引擎.
天生的分布式:它知道如何管理节点来完成扩展和高可用.所以水平扩展很方便
只需要加一台机器稍做配置即可.
lucene的倒排索引
关键字 文章号[出现的频率] 出现的位置
中国 1[2] 2,4
5[3] 1,5,9
杭州 3[5] 2,6,8,9,12
lucene分别将上面的三列数据放到3个文件中分别是 词典文件 频率文件 位置文件
词典文件中的每个关键字都保留了指向词频文件和位置文件的指针,可以通过关键字直接找到
她的词频和位置.
压缩算法
为了减少索引的空间Lucene采用了压缩算法 中国人 被分词成 中国 中国人
中国->2 中国人->2人
索引词
拆分后的关键字(不可以在拆分的) 搜索的精度值
可以通过trem查询精准的搜索
文本
文本是一段普通的非结构化的文字,被分词成多个索引词 放在es的索引中,可以通过单个的索引词
找到对应的文本.
路由
当存储文档的时候,该文档只会存在唯一的一个主分片中,具体在哪个主分片是根据文档的id根据散列值进行分配的
分片
分片是单个lucene实例,这是es比较底层的功能,索引其实是指向主分片和副本分片的逻辑空间. 逻辑上数 据存在索引中
物理上数据存在单个lucene的实例中.开发使用的时候我们只关注索引就可以了elasticSearch会自动的管理分片,故障的
转移,数据的复制. 主分片挂掉副本分片会代理主分片. 一个索引默认有5个主分片(可以修改配置文件改变默认的个数).
事先预制主分片的数量,主分片的数量一旦确定就不能被改变.每个主分片可以有零个或者多个副本分片,从而保证的集群的
高可用,副本分片的数量是可以改变的.
索引 index
具有相同结构的文档集合,可以理解成mysql中的表,和表不同的地方是mysql一个表中只可以存放一种数据类型,index中可以有多个
type(一般推荐一个index对应一个type).索引的名称应该全部小写
类型 type
类型是索引的逻辑分区,索引是类型的容器.
文档 document
文档就是存在es中的一个json格式的字符串,就像mysql中的一条记录,有值也有类型 文档也有field 和 对应的类型的
josn的格式是键值对{“name”:“zhangsan”,“age”:21}
也可以是数组格式的{“name”:[“张三”,“李四”,“王五”]}
映射 mapping
映射是对文档的每个字段类型的定义,可以提前预定义,存储文档的时候回按照预定的类型来存储,如果不提前预定义也是可以的
es在存的时候回自动的识别每个字段的类型.即使预定义了字段的类型,当后期有数据结构改变,有新的字段产生了,新的字段可以不用
自定,es也会自动的识别,这一点跟mongdb很像,这也是非关系型数据库比关系型数据库的一个优点
ID
Id是文档存储的唯一标识,可以自己定义,如果自己不定义在存储的时候es会自动的生产一个ID(推荐使用es自动生成的ID插入的性能高)
/index/type/id
端口号
9200作为Http协议,主要用于外部通讯
9300作为Tcp协议,jar之间就是通过tcp协议通讯
ES集群之间是通过9300进行通讯
一般开发人员连接es属于外部的通讯 建议使用9200端口号更为安全
索引的管理
创建索引
可以用postman来发送请求 restful 风格的
PUT 10.10.50.220:9200/test
{
"settings":{
"index":{
"number_of_shards":3,
"number_of_replicas":1
}
}
}
查看创建的结果
GET 10.10.50.220:9200/test
{
"test": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1586254233231",
"number_of_shards": "3",
"number_of_replicas": "1",
"uuid": "YnyvLf-6QAmcJaJWfrUhOw",
"version": {
"created": "6030299"
},
"provided_name": "test"
}
}
}
}
修改索引
PUT 10.10.50.220:9200/test/_settings
{
"settings":{
"index":{
"number_of_replicas":2
}
}
}
删除索引
DELETE
10.10.50.220:9200/test
返回
{
"acknowledged": true
}
索引的别名
索引的别名类似于mysql中的视图,可以理解为一种映射的关系
PUT 10.10.50.220:9200/_aliases
{
"actions":{
"add":{
"index":"test","alias":"testAlias"
}
}
}
删除别名
{
"actions":{
"remove":{
"index":"test","alias":"testAlias"
}
}
}
给多个索引取同样的别名,当我们查询这个别名的时候就会查询到多个索引的内容
{
"actions":{
"add":{
"indices":["test","test1"],"alias":"testAlias"
}
}
}
获取配置
GET 10.10.50.220:9200/test/_settings
查看分词
POST 10.10.50.220:9200/_analyze
{
“analyzer”: “standard”,
“text”:“this is a test”
}
查看索引的状态
GET meadin/_stats
状态包含的信息很多 总数 被删掉的数量 占用的磁盘大小…
索引的冲洗
POST 10.10.50.220:9200/test/_flush
可以冲洗一个或多个索引,冲洗的作用是将数据保存到索引存储中并清除内部的事物日志,这么做是为了释放内存空间
es默认是内存启发式算法来自动触发冲洗