elasticsearch使用
简介
-
elasticsearch是一种开源的搜索引擎,可以从海量数据中快速找到需要的内容。
-
elastic stack(ELK):以ES为核心的技术栈
-
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域
-
ES是核心,其他的组件可以被替换
-
优势
- 支持分布式、水平扩展
- 提供restful风格的接口,适应多语言
ES核心——倒排索引
-
正向索引
-
查找过程:先查找文档,然后查询文档中是否含有关键词,如果有加入结果集
-
mysql中采用正向索引
-
-
倒排索引
- 文档 每一条数据
- 词条:将文档按照某个规则划分词语
-
搜索过程
- 分词
- 在倒排索引库根据分词结果查找文档id
- 根据id查询文档
- 返回结果集
ES中的概念
-
文档
- 在es中存储的数据,使用json格式
-
索引
- 相同类型文档的集合,类似于数据库中的表
-
映射(mapping)
- 对索引中字段的约束例如是string、还是int
-
Mysql与ES的对比
- 两者是互补的关系
- mysql是擅长事务类型的操作,确保数据的一致性
- ES擅长海量数据的存储,查询分析
es的安装(略)
-
安装es
-
安装kibanna
-
安装ik分词器
es操作
mapping
- 类型 type
- 字符类型
- text:可分词的文本
- keyword:不可分词的文本
- 数值类型:long、integer、float、double
- 日期类型:date
- 对象类型:object
- 字符类型
- index:是否创建倒排索引 默认值为true
- analyzer:分词器
- proterties:子属性
索引库的操作
-
创建索引库
PUT /lmx {"mappings": {"properties": {"info":{"type": "text", "analyzer": "ik_smart"},"name":{"type": "text", "analyzer": "ik_smart"},"email":{"type": "keyword"},"preson":{"properties": {"age":{"type":"integer","index":"false"}}}}} }
-
获取索引库信息
GET /lmx
- 删除索引库
DELETE /lmx
- 更改索引库
- 在es中,不允许修改字段名,只允许添加新的字段名,防止倒排索引失效
PUT /lmx/_mapping{"properties":{"address":{"type":"text","analyzer":"ik_smart"}}}
文档的操作
- 增加
POST /lmx/_doc/1
{"address":"陕西省","email":"294371334@qq.com","info":"测试","name":"两面性","preson":{"age":10}
}
- 查询
GET /lmx/_doc/1
- 修改
- 全量修改:删除旧文档,插入新文档(又能删除、又能修改)
PUT /lmx/_doc/1{"address":"陕西省","email":"lmx@qq.com","info":"测试","name":"两面性","preson":{"age":10}}
- 增量修改
POST /lmx/_update/1{"doc":{"name":"修改测试"}}
- 删除
DELETE /lmx/_doc/1