简介
官网地址 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch 属于apache组织。
ELK
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。是一个通用的日志框架。 kibana官网
可视化
es可视化的方式很多,像上面elk中的kibana是一种,我认为最简单的方式是使用head谷歌浏览器插件。 es-head插件下载 如果出现跨域问题,改下es的elasticsearch.yml文件
http.cors.enabled: true
http.cors.allow-origin: "*"
分片
elasticsearch在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移!
就算只启动了一个es也是一个集群,默认的集群名elasticsearch。
一个集群至少有一个节点,而一个节点就是一个elasricsearch进程,节点可以有多个索引默认的,如果你创建索引,那么索引将会有个5个分片(primary shard,又称主分片)构成的,每一个主分片会有一个副本(replica shard,又称复制分片)
上图是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失。实际上,一个分片是一个Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。
和mysql对比
- 数据库(database): 索引(indices)
- 表(tables): types
- 行(rows): documents
- 字段(columns): fields
restful操作
es提供了restful接口的方式操作数据
官方文档
扩展:通过get _cat/ 可以获取ElasticSearch的当前的很多信息!
GET _cat/indices
GET _cat/aliases
GET _cat/allocation
GET _cat/count
GET _cat/fielddata
GET _cat/health
GET _cat/indices
GET _cat/master
GET _cat/nodeattrs
GET _cat/nodes
GET _cat/pending_tasks
GET _cat/plugins
GET _cat/recovery
GET _cat/repositories
GET _cat/segments
GET _cat/shards
GET _cat/snapshots
GET _cat/tasks
GET _cat/templates
GET _cat/thread_pool
数据类型
es有着非常丰富的字段类型,并且当你不指定的时候会自动匹配类型。但是elasticsearch也可能猜不对,所以最安全的方式就是提前定义好所需要的映射,这点跟关系型数据库一样了。
复杂查询
1.查询匹配
- match:匹配(会使用分词器解析(先分析文档,然后进行查询))
- _source:过滤字段
- sort:排序
- form、size 分页
2.多条件查询(bool)
- must 相当于 and
- should 相当于 or
- must_not 相当于 not (... and ...)
- filter 过滤
3.匹配数组
- 貌似不能与其它字段一起使用
- 可以多关键字查(空格隔开)— 匹配字段也是符合的
- match 会使用分词器解析(先分析文档,然后进行查询)
4.精确查询
term 直接通过 倒排索引 指定词条查询
适合查询 number、date、keyword ,不适合text
5.text和keyword
- text: 支持分词,全文检索、支持模糊、精确查询,不支持聚合,排序操作; text类型的最大支持的字符长度无限制,适合大字段存储;
- keyword: 不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。 keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。