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版本下载下来。官网可以直接下载。然后解压复制三份。配置文件如下:
启动 bin目录下面 ./bin/elasticsearch.sh 后台运行 ./elasticsearch.sh -d 然后可以到日志目录下看启动目录,没有报错可以了。或者netstat -tnlp,查看端口启动情况。elasticsearch head 可视化工具的使用
工具是node.js开发,所以需要安装node.js. 下载地址: or download按钮,点击download zip进行下载。下载完毕后解压到任意路径上,别放在elasticsearch安装路径上。
#allow origin 修改elasticsearch配置文件可以跨域。http.cors.enabled: truehttp.cors.allow-origin: "*"复制代码
使用grunt server & 后台启动
插件的使用(ik,pinyin,sql)
github 中可以找到插件,直接下载。注意:插件的版本必须要和elasticsearch版本一致。
所有插件同上。安装chorme sense工具可以自行百度。可以进行curl操作
javaApi操作elasticsearch
自己的增删改查demo. git地址。
: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博大精深。可自行学习。