【es】elasticsearch/es 搜索服务器介绍
一、ElasticSearch 介绍
我们先来看下百度百科的介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用 JSON 通过 HTTP 来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用 Elasticsearch 来解决所有这些问题及可能出现的更多其它问题。
官方网址:https://www.elastic.co/cn/products/elasticsearch
Github:https://github.com/elastic/elasticsearch
总结:
elasticsearch 是一个基于 Lucene 的高扩展的分布式搜索服务器,支持开箱即用。
elasticsearch 隐藏了 Lucene 的复杂性,对外提供 Restful 接口来操作索引、搜索。
突出优点:
扩展性好,可部署上百台服务器集群,处理 PB 级数据。
近实时的去索引数据、搜索数据。
es 和 solr 选择哪个?
如果你公司现在用的 solr 可以满足需求就不要换了。
如果你公司准备进行全文检索项目的开发,建议优先考虑 elasticsearch,因为像 Github 这样大规模的搜索都在用它。
1.1 原理与应用
1.1.1 索引结构
下图是 ElasticSearch 的索引结构,下边黑色部分是物理结构,上边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述 ElasticSearch 的工作原理及去使用物理结构中的索引文件。
逻辑结构部分是一个倒排索引表:
将要搜索的文档内容分词,所有不重复的词组成分词列表。
将搜索的文档最终以 Document 方式存储起来。
每个词和 docment 都有关联。
如下:
现在,如果我们想搜索 quick brown ,我们只需要查找包含每个词条的文档:
编辑两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。
1.1.2 RESTful 应用方法
如何使用 es?Elasticsearch 提供 RESTful Api 接口进行索引、搜索,并且支持多种客户端。
下图是 es 在项目中的应用方式:
1)用户在前端搜索关键字
2)项目前端通过 http 方式请求项目服务端
3)项目服务端通过 Http RESTful 方式请求 ES 集群进行搜索
4)ES 集群从索引库检索数据。
二、ElasticaSearch 的的安装使用
2.1 安装
安装配置:
1、新版本要求至少 jdk1.8 以上。
2、支持 tar、zip、rpm 等多种安装方式。在 windows 下开发建议使用 ZIP 安装方式。
3、支持 docker 方式安装
详细参见:Installing Elasticsearch | Elasticsearch Guide [8.5] | Elastic
下载 ES: Elasticsearch 6.2.1https://www.elastic.co/downloads/past-releases
解压 elasticsearch-6.2.1.zip
bin:脚本目录,包括:启动、停止等可执行脚本
config:配置文件目录
data:索引目录,存放索引文件的地方
logs:日志目录
modules:模块目录,包括了 es 的功能模块
plugins :插件目录,es 支持插件机制
2.2 配置文件
2.2.1 三个配置文件
ES 的配置文件的地址根据安装形式的不同而不同:
使用 zip、tar 安装,配置文件的地址在安装目录的 config 下。
使用 RPM 安装,配置文件在/etc/elasticsearch 下。
使用 MSI 安装,配置文件的地址在安装目录的 config 下,并且会自动将 config 目录地址写入环境变量 ES_PATH_CONF。
本教程使用的 zip 包安装,配置文件在 ES 安装目录的 config 下。
配置文件如下:
elasticsearch.yml : 用于配置 Elasticsearch 运行参数。
jvm.options : 用于配置 Elasticsearch JVM 设置。
log4j2.properties: 用于配置 Elasticsearch 日志。
2.2.2 elasticsearch.yml
配置格式是 YAML,可以采用如下两种方式:
方式 1:层次方式 path: data: /var/lib/elasticsearch logs: /var/log/elasticsearch
方式 2:属性方式 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch
本项目采用方式 2,例子如下:
注意 path.data 和 path.logs 路径配置正确。
常用的配置项如下:
cluster.name: 配置 elasticsearch 的集群名称,默认是 elasticsearch。建议修改成一个有意义的名称。
node.name: 节点名,通常一台物理服务器就是一个节点,es 会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个 cluster 集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.conf: 设置配置文件的存储路径,tar 或 zip 包安装默认在 es 根目录下的 config 文件夹,rpm 安装默认在/etc/ elasticsearch。
path.data: 设置索引数据的存储路径,默认是 es 根目录下的 data 文件夹,可以设置多个存储路径,用逗号隔开。
path.logs: 设置日志文件的存储路径,默认是 es 根目录下的 logs 文件夹。
path.plugins: 设置插件的存放路径,默认是 es 根目录下的 plugins 文件夹。
bootstrap.memory_lock: true 设置为 true 可以锁住 ES 使用的内存,避免内存与 swap 分区交换数据。network.host: 设置绑定主机的 ip 地址,设置为 0.0.0.0 表示绑定任何 ip,允许外网访问,生产环境建议设置为具体的 ip。
http.port: 6200 设置对外服务的 http 端口,默认为 6200。
transport.tcp.port: 6300 集群结点之间通信端口。
node.master: 指定该节点是否有资格被选举成为 master 结点,默认是 true,如果原来的 master 宕机会重新选举新的 master。
node.data: 指定该节点是否存储索引数据,默认为 true。
discovery.zen.ping.unicast.hosts: [“host1:port”, “host2:port”, “…”] 设置集群中 master 节点的初始列表。
discovery.zen.ping.timeout: 3s 设置 ES 自动发现节点连接超时的时间,默认为 3 秒,如果网络延迟高可设置大些。
discovery.zen.minimum_master_nodes:
主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有 3 个符合要求的主结点,那么这里要设置为 2。
node.max_local_storage_nodes: 单机允许的最大存储结点数,通常单机启动一个结点建议设置为 1,开发环境如果单机启动多个节点可设置大于 1.
2.2.3 jvm.options
设置最小及最大的 JVM 堆内存大小:
在 jvm.options 中设置 -Xms 和-Xmx:
1) 两个值设置为相等
2) 将 Xmx 设置为不超过物理内存的一半。
2.2.4 log4j2.properties
日志文件设置,ES 使用 log4j,注意日志级别的配置。
2.2.5 系统配置
在 linux 上根据系统资源情况,可将每个进程最多允许打开的文件数设置大些。su limit -n 查询当前文件数使用命令设置 limit:先切换到 root,设置完成再切回 elasticsearch 用户。
也可通过下边的方式修改文件进行持久设置/etc/security/limits.conf 将下边的行加入此文件:
2.3 启动 ES
进入 bin 目录,在 cmd 下运行:elasticsearch.bat
浏览器输入:http://localhost:6200
显示结果如下(配置不同内容则不同)说明 ES 启动成功:
2.4 head 插件安装
head 插件是 ES 的一个可视化管理插件,用来监视 ES 的状态,并通过 head 客户端和 ES 服务进行交互,比如创建映射、创建索引等,head 的项目地址在 https://github.com/mobz/elasticsearch-head 。
从 ES6.0 开始,head 插件支持使得 node.js 运行。
1、安装 node.js
2、下载 head 并运行
3、运行
打开浏览器调试工具发现报错:
原因是:head 插件作为客户端要连接 ES 服务(localhost:6200),此时存在跨域问题,elasticsearch 默认不允许跨域访问。
解决方案:设置 elasticsearch 允许跨域访问。在 config/elasticsearch.yml 后面增加以下参数:
注意:将 config/elasticsearch.yml 另存为 utf-8 编码格式。
修改过后就再重新运行,就可以成功连接 ES。
GitHub上项目的地址为: https://github.com/prettykoala/elasticsearch-head
如果需要转载,请注明出处,谢谢!本文为博主原创文章!
完结!
版权声明: 本文为 InfoQ 作者【No8g攻城狮】的原创文章。
原文链接:【http://xie.infoq.cn/article/0bf0ff220faee507ffdded6f2】。文章转载请联系作者。
评论