elasticsearch简介
elasticsearch 是基于lucene的高度可扩展的开源全文搜索和分析引擎。官网上介绍是一位程序员为了给他厨师妻子做一个食谱搜索引擎。使用lucene开发,后来发展成为现在的elasticsearch。第一个版本发布于2010年,现在github发展的特别活跃,到今天,已经有1100位github的代码贡献者,223个发行的版本。
足以说明elasticsearch的强大,使用官网上的话,elasticsearch可以让用户快速的、近乎实时(插入到可搜索通常为1秒)、存储和分析大量数据。
elasticsearch 特性
1、速度快。elasticsearch对所有的内容进行了索引。
2、可扩展性,可以在单节点运行elasticsearch,生产环境可以在300节点集群。所以可以水平增加节点以处理请求的能力。
3、高可用。提供了副本,主节点挂掉,可以检测故障,重新选择新的节点。
4、灵活性。数字,文本,地理位置,结构化,非结构化。支持的数据类型很多。应用程序搜索,安全分析和日志记录都依赖Elasticsearch来解决各种挑战。
elasticsearch 中的一些概念。
| 表头 | 表头 |
|---|---|
| 集群cluster | 由一个节点或多个节点组成,cluster.name相同的节点。 |
| 节点node | 一个节点node就是一个ElasticSearch的实例。可以设置是否可以为主节点,还是数据节点,还是协调节点。用户能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于哪个节点上,可以转发请求到相应的节点上。 |
| 分片shard | 一个分片是最小的工作单元,仅仅保存索引中所有数据的一部分。默认是5个分片,1个副本。 |
| 主分片 | 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。索引创建完成时,主分片的数量就固定了,但是复制分片的数量可以随时调整。 |
| 复制分片 | 是主分片的副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档 |
| 索引index | 索引是具有某些相似特征的文档的集合,它和数据库中的索引概念并不十分相同。我们可以把索引理解为数据库文档中的数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片 |
| type类型 | 在索引中,我们可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全由开发者决定。通常,为具有一组公共字段的文档定义类型。例如,假设开发者运行博客平台并将所有数据存储在一个索引中。在此索引中,我们可以为用户数据定义类型,为博客数据定义另一种类型,并为注释数据定义另一种类型。我们可以把索引理解成数据库文档中的表。 |
| 文档 | 一条记录 |
以下是 es 和 关系型数据库的简单类比
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices(索引簇)-> Types -> Documents -> Fields
集群环境搭建
elasticsearch 集群搭建
下面我使用一台服务器搭建了三个节点的集群作为演示。由于一个节点默认的jvm内存大小是2g,我在一台服务器只有2G,在config目录下面我修改jvm.oprion配置,-xms 和 -xmx 设置为512M
节点的数根据官方的说法要n/2+1个节点,为了防止脑裂。脑裂就是三个节点中的主节点出现问题,无法连接,就会从剩下的两个从节点中选举一个主节点,但是之前的主节点又恢复过来,可以根据第三个节点,让新选举的主节点降级为从节点。但是要是两个节点,让谁降级是不明确的。
现在的最新的版本是6.4.2版本下载下来。官网可以直接下载。然后解压复制三份。配置文件如下:
后台运行 ./elasticsearch.sh -d
然后可以到日志目录下看启动目录,没有报错可以了。或者netstat -tnlp,查看端口启动情况。
elasticsearch head 可视化工具的使用
工具是node.js开发,所以需要安装node.js. 下载地址:github.com/mobz/elasti… or download按钮,点击download zip进行下载。下载完毕后解压到任意路径上,别放在elasticsearch安装路径上。
#allow origin 修改elasticsearch配置文件可以跨域。
http.cors.enabled: true
http.cors.allow-origin: "*"
使用grunt server & 后台启动
插件的使用(ik,pinyin,sql)
github 中可以找到插件,直接下载。注意:插件的版本必须要和elasticsearch版本一致。
安装chorme sense工具可以自行百度。可以进行curl操作
javaApi操作elasticsearch
自己的增删改查demo. git地址。
git@github.com:wanjiongheng/mysql-to-elasticsearch.git
这是创建索引的时候的配置如下:
{
"state": "open",
"settings": {
"index": {
"number_of_shards": "3",
"number_of_replicas": "0",
"analysis": {
"filter": {
"my_pinyin": {
"keep_joined_full_pinyin": "true",
"none_chinese_pinyin_tokenize": "false",
"keep_none_chinese_in_joined_full_pinyin": "true",
"keep_original": "true",
"keep_first_letter": "false",
"keep_separate_first_letter": "false",
"type": "pinyin",
"keep_full_pinyin": "false"
}
},
"analyzer": {
"ik_pinyin_analyzer": {
"filter": [
"my_pinyin",
"word_delimiter"
],
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
}
},
"mappings": {
"goods": {
"properties": {
"name_pinyin": {
"type": "keyword"
},
"note": {
"type": "keyword"
},
"flag": {
"type": "integer"
},
"modifyTime": {
"type": "long"
},
"brand_pinyin": {
"type": "keyword"
},
"createTime": {
"type": "long"
},
"price": {
"type": "keyword"
},
"name": {
"type": "keyword",
"fields": {
"ik_smart_pinyin_analyzer": {
"analyzer": "ik_pinyin_analyzer",
"term_vector": "with_positions_offsets",
"type": "text"
}
}
},
"id": {
"type": "long"
},
"brand": {
"type": "keyword",
"fields": {
"ik_smart_pinyin_analyzer": {
"analyzer": "ik_pinyin_analyzer",
"term_vector": "with_positions_offsets",
"type": "text"
}
}
},
"useState": {
"type": "integer"
}
}
}
},
"aliases": [
"goods_alias"
],
}
最后,elasticsearch api博大精深。可自行学习。