ElasticSearch:
- 概述:
- 什么是ElasticSearch:Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用
Lucene
作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API
来隐藏Lucene
的复杂性,从而让全文搜索变得简单 - ElasticSearch 和 Solr对比:(面试中常见的面试题)
- 分布式管理:Solr 利用
Zookeeper
进行分布式管理,而Elasticsearch自身
带有分布式协调管理功能; - 支持的格式:Solr 支持
更多格式
的数据,而Elasticsearch 仅支持json文件格式
- 功能: Solr 官方提供的
功能更多
,而 Elasticsearch 本身更注重于核心功能
,高级功能多有第三方插件提供 - 表现:Solr 在传统的
搜索应用
中表现好于 Elasticsearch,但在处理实时搜索应用
时效率明显低于 Elasticsearch
- 分布式管理:Solr 利用
- 什么是ElasticSearch:Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用
- ElasticSearch安装和启动:
- 安装步骤:
- 下载ES压缩包:注意的是
ElasticSearch
分为Linux
和Window
版本 这里使用的是Windows版本 下载的官方地址 - 安装ES服务:Window版的ElasticSearch的安装很简单,类似Windows版的Tomcat,解压开即安装完毕 目录结构如下:
- 使用前的步骤:修改elasticsearch配置文件:
config/elasticsearch.yml
,增加以下两句命令:允许elasticsearch跨越访问 方便以后的使用http.cors.enabled: true
http.cors.allow‐origin: “*”
- 下载ES压缩包:注意的是
- 启动服务:点击ElasticSearch下的bin目录下的
elasticsearch.bat
启动
- 启动服务中需要注意的是:注意:
9300
是tcp通讯端口,集群间和TCPClient都执行该端口,9200
是http协议的RESTful接口 进行访问的时候使用9200
端口 通过浏览器访问ElasticSearch服务器,看到如下返回的json信息,代表服务启动成功:
- 安装ES的图形化界面插件
- 注意: ElasticSearch不同于Solr自带图形化界面,我们可以通过安装ElasticSearch的head插件,完成图形化界面的效果,完成索引数据的查看。
elasticsearch-5-*
以上版本安装head需要安装node
和grunt
- 安装步骤:
- 注意: ElasticSearch不同于Solr自带图形化界面,我们可以通过安装ElasticSearch的head插件,完成图形化界面的效果,完成索引数据的查看。
- 安装步骤:
- ElasticSearch相关概念(术语)
- 介绍:Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行
索引、搜索、排序、过滤
这样的结构就像是传统的关系型数据库的结构:Relational DB ‐> Databases ‐> Tables ‐> Rows ‐> Columns 关系型数据库
Elasticsearch ‐> Indices ‐> Types ‐> Documents ‐> Fields ElasticSearch - ElasticSearch中的概念:
- 索引:index 一个索引就是一个拥有几分相似特征的文档的集合
- 类型:type 在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区
- 字段:Field 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
- 映射:mapping mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等;或者是说es 中数据的一些使用规则的设置也叫映射
- 文档:document 一个文档是一个可被索引的基础信息单元,在es 中使用的是json类型 在一个index 或者是type中能存储多个文档。
- 接近实时:NRT ES是一个接近试试的搜索平台,从索引一个文档直到这个文档被搜索到只有一个轻微的延时(通常是在1s之内)
- 集群:cluster [ˈklʌstər]集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。一个节点只能通过指定某个集群的名字,来加入这个集群
- 节点:node 节点是集群中的一个服务器 作为集群的一部分,它存储数据,参与集群的索引和搜索功能。和集群类似,节点也是由名字来标识
- 分片和复制:shards&replicas 将索引划分成多份,这些份就叫做分片 而创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制
- 使用分片 和 复制的原因:
- 使用分片的原因:就是为了提高性能(吞吐量)
- 允许你水平分割/扩展你的内容容量。
- 允 许你在分片(潜在地,位于多个节点上)之上 进行分布式的、并行的操作,进而提高性能/吞吐量
- 使用复制的原因:提高可用性
- 在分片/节点失败的情况下,提供了高可用性。
- 注意复制分片和原/主要(original/primary)分片不要置于同一节点上(要不复制就没有意义了)
- 在分片/节点失败的情况下,提供了高可用性。
- 使用分片的原因:就是为了提高性能(吞吐量)
- 使用分片 和 复制的原因:
- 介绍:Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行
- ElasticSearch的客户端操作:
- ElasticSearch客户端使用方式:三种
- 使用elasticsearch-head插件 上面已经安装过了
- 使用elasticsearch提供的Restful接口直接访问
- 使用elasticsearch提供的API进行访问
- Postman下载与安装:
*安装步骤: 非常的简单
* 下载的官方地址
* 安装注册即可 (免费注册)- 使用步骤:使用Postman工具进行Restful接口访问
- ElasticSearch的接口语法 :
curl ‐X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' ‐d '<BODY>'
- 参数详解:
- 参数详解:
- 创建index 和 mapping: 在创建index的时候进行mapping的创建
- 在创建index之后在创建mapping: 先使用put 方法创建一个索引 在使用post方法设置mapping信息
- 删除索引index:
- 创建文档document:
- 修改文档document
- 删除文档document:
- 根据id进行文档的查询:(这里的id 是文档真正的_id 不是id域中的id值)
- 使用querystring进行查询:(就像是Lucene中的QueryParse一样 先进行分词 在进行查询)
- ElasticSearch的接口语法 :
- 使用步骤:使用Postman工具进行Restful接口访问
- ElasticSearch客户端使用方式:三种
- IK 分词器和ElasticSearch集成使用
- ES中存在的问题:就是和 Lucene是一致的 使用标准的分析器 对中文的支持不好(会将中文的每一个字进行分词)
- 解决方式:ElasticSearch集成IK分词器(插件)
- IK分词器下载安装:
- 下载:下载地址
- 直接解压到
elasticsearch-5.6.8\plugins
就行 - 重新启动ES服务器即可
- 使用:
- IK提供了两个分词算法ik_smart 和 ik_max_word 其中 ik_smart 为最少切分,ik_max_word为最细粒度划分
- 使用方式和标准的分析器一致
- IK分词器下载安装:
- ElasticSearch集群
- 节点的配置:ES进行集群的搭建非常的简单 不需要使用第三方工具 只要简单的配置即可 即修改
config\elasticsearch.yml
配置文件 且 将data
文件目录进行删除#节点的配置信息:
#集群名称,保证唯一
cluster.name: my‐elasticsearch
#节点名称,必须不一样
node.name: node‐1
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9200
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9300
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9300”,“127.0.0.1:9301”,“127.0.0.1:9302”] - 使用elasticsearch-header查看集群情况
- 节点的配置:ES进行集群的搭建非常的简单 不需要使用第三方工具 只要简单的配置即可 即修改