写点什么

【es】elasticsearch/es 搜索服务器介绍

作者:No8g攻城狮
  • 2022-12-06
    河南
  • 本文字数:3841 字

    阅读完需:约 13 分钟

一、ElasticSearch 介绍

我们先来看下百度百科的介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用 JSON 通过 HTTP 来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用 Elasticsearch 来解决所有这些问题及可能出现的更多其它问题。

官方网址:https://www.elastic.co/cn/products/elasticsearch

Github:https://github.com/elastic/elasticsearch


总结:

  1. elasticsearch 是一个基于 Lucene 的高扩展的分布式搜索服务器,支持开箱即用。

  2. elasticsearch 隐藏了 Lucene 的复杂性,对外提供 Restful 接口来操作索引、搜索。


突出优点:

  1. 扩展性好,可部署上百台服务器集群,处理 PB 级数据。

  2. 近实时的去索引数据、搜索数据。


es 和 solr 选择哪个?

  1. 如果你公司现在用的 solr 可以满足需求就不要换了。

  2. 如果你公司准备进行全文检索项目的开发,建议优先考虑 elasticsearch,因为像 Github 这样大规模的搜索都在用它。

1.1 原理与应用

1.1.1 索引结构

下图是 ElasticSearch 的索引结构,下边黑色部分是物理结构,上边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述 ElasticSearch 的工作原理及去使用物理结构中的索引文件。


逻辑结构部分是一个倒排索引表:

  1. 将要搜索的文档内容分词,所有不重复的词组成分词列表。

  2. 将搜索的文档最终以 Document 方式存储起来。

  3. 每个词和 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,例子如下:

cluster.name: jiaoyunode.name: jy_node_1network.host: 0.0.0.0http.port: 6200transport.tcp.port: 6300node.master: truenode.data: true#discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:6301", "0.0.0.0:6302"]discovery.zen.minimum_master_nodes: 1bootstrap.memory_lock: falsenode.max_local_storage_nodes: 1path.data: D:\ElasticSearch\elasticsearch-6.2.1\datapath.logs: D:\ElasticSearch\elasticsearch-6.2.1\logshttp.cors.enabled: truehttp.cors.allow-origin: /.*/
复制代码


注意 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 用户。

sudo su  ulimit -n 65536 su elasticsearch 
复制代码


也可通过下边的方式修改文件进行持久设置/etc/security/limits.conf 将下边的行加入此文件:

elasticsearch  -  nofile  65536
复制代码

2.3 启动 ES

进入 bin 目录,在 cmd 下运行:elasticsearch.bat


浏览器输入:http://localhost:6200

显示结果如下(配置不同内容则不同)说明 ES 启动成功:

{  "name" : "jy_node_1",  "cluster_name" : "jiaoyu",  "cluster_uuid" : "J18wPybJREyx1kjOoH8T-g",  "version" : {    "number" : "6.2.1",    "build_hash" : "7299dc3",    "build_date" : "2017-02-07T19:34:26.990113Z",    "build_snapshot" : false,    "lucene_version" : "7.2.1",    "minimum_wire_compatibility_version" : "5.6.0",    "minimum_index_compatibility_version" : "5.0.0"  },  "tagline" : "You Know, for Search"}
复制代码

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 并运行

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open HTTP://本地主机:6100 /
复制代码


3、运行


打开浏览器调试工具发现报错:

Origin null is not allowed by Access-Control-Allow-Origin.
复制代码


原因是:head 插件作为客户端要连接 ES 服务(localhost:6200),此时存在跨域问题,elasticsearch 默认不允许跨域访问。

解决方案:设置 elasticsearch 允许跨域访问。在 config/elasticsearch.yml 后面增加以下参数:

#开启cors跨域访问支持,默认为falsehttp.cors.enabled: true#跨域访问允许的域名地址,(允许所有域名)以上使用正则http.cors.allow-origin: /.*/ 
复制代码


注意:将 config/elasticsearch.yml 另存为 utf-8 编码格式。

修改过后就再重新运行,就可以成功连接 ES。


GitHub上项目的地址为: https://github.com/prettykoala/elasticsearch-head

如果需要转载,请注明出处,谢谢!本文为博主原创文章!


完结!

发布于: 刚刚阅读数: 3
用户头像

No8g攻城狮

关注

熟了再告诉你 2022-12-03 加入

CSDN Java领域优质创建者 CSDN 认证博客专家

评论

发布
暂无评论
【es】elasticsearch/es搜索服务器介绍_elastic_No8g攻城狮_InfoQ写作社区