Elasticsearch 介绍和安装

说明

  • 最近工作需要调研数据搜索相关技术,可选的只有Elasticsearch和solr,比较发现Elasticsearch更加符合场景需要。

介绍

  • Elasticsearch 基于Apache Lucene开发的开源分布式、高扩展、高实时的搜索数据分析引擎。基于RESTful web接口,提供一个分布式多用户能力的全文搜索引擎。
  • Elasticsearch是用Java语言开发的,是一种流行的企业级搜索引擎,应用于搜索各种文档,提供扩展功能,具有接近实时的搜索效率,支持多租户。可以扩展到上百台服务器,处理PB级别的数据,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
  • 客户端支持Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby等语言开发。
  • 同类型产品solor(同样基于Apache Lucene)

发展史

  • Elasticsearch BV成立于2012年,主要围绕Elasticsearch及相关软件提供商业服务和产品。2014年6月,在成立公司18个月后,该公司宣布通过C轮融资筹集7000万美元。这轮融资由新企业协会(NEA)牵头。其他投资者包括Benchmark Capital和Index Ventures。这一轮融资总计1.04亿美元
  • 2015年3月,Elasticsearch公司更名为Elastic。
  • 2018年6月,Elastic提交了首次公开募股申请,估值在15亿到30亿美元之间。公司于2018年10月5日在纽约证券交易所挂牌上市。一些组织将Elasticsearch作为托管服务提供。这些托管服务提供托管、部署、备份和其他支持。大多数托管服务还包括对Kibana的支持。

产品应用

  • 2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。 “GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”
  • 维基百科:启动以elasticsearch为基础的核心搜索架构
  • SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”
  • 百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据
  • 新浪使用ES 分析处理32亿条实时日志
  • 阿里使用ES 构建挖财自己的日志采集和分析体系

资料

官方

  • Elasticsearch 官网 报价,演示版本7.10.1
  • 软件下载官方提供多种版本普通版、Elastic版(ecctl)、No Jdk版、OSS版、OSS No Jdk版
    • alpha 预览版bug较多
    • Beta 修复重大bug,有少量小问题
    • Legacy 遗留老版本稳定版
  • Kibana 收费可视化工具,查看和管理Elasticsearch 版本与安装包一致
  • 官方安装文档
  • 中文文档 部分内容老旧,建议查阅官方文档

插件

  • head插件,与Kibana功能类似,git地址需要nodejs环境
    • 经测试,当前版本支持
  • cerebro 类kibanna功能软件,警惕兼容问题。
  • ik分词器 git地址版本与安装包一致

端口说明

  • 9300 tcp通信端口
  • 9200 http协议端口

基本概念

index索引

  • index是数据管理的顶层单位,Elasticsearch会索引所有所有字段,索引、搜索、更新、删除数据的时候,都会用到索引,索引名:必须全部是小写字母,它是单个数据库,可类比mysql中的数据库

type类型

  • 一个索引中,你可以定义一种或多种类型。该属性在新版本中被删除了。一个类型是你的索引的一个逻辑上的分类/分区。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,可类比mysql中的表

id

  • 和type对应,字符串类型,是id的唯一标识。

mapping 定义数据结构

  • mapping是限制处理数据的方式规则,如某个字段的数据类型、默认值、分析器、是否被索引等,都是可以通过映射设置,另外处理esearch里面数据的一些使用规则设置也叫做映射。因为按最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。相当于mysql中,设置表的主键外键等,类比表结构

filed字段

  • 相当于mysql 数据表的字段,对文档数据根据不同属性进行的分类标识 。

document文档

  • 一个文档是一个可被索引的基础信息单元,文档以JSON(Javascript Object Notation)格式来表示,在一个index/type里面,你可以存储任意多的文档。插入索引库以文档为单位,类比与数据库中的一行数据

分布式

cluster 集群

  • 一个集群就是由一个或多个节点组织在一起,它们共同持有所有数据,并提供索引和搜索功能。一个集群由一个唯一的名字标识默认“elasticsearch”。一个节点只能通过指定某个集 群的名字,来加入这个集群。

node 节点

  • 节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能。一个节点由一个名字来标识,默认情况下,名字是一个随机的漫威漫画角色的名字,这个名字会在启动时赋予节点,该名字在集群中唯一,以便cluster管理。默认情况下,只启动一个节点,默认创建并加入一个叫做“elasticsearch”的集群。

shared 分片

  • 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这个过程叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。分片很重要,主要有两方面的原因: *
    • 允许你水平分割/扩展你的内容容量。
    • 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量。

replicas 复制

  • 在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点因未知原因处于离线状态或消失,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。Elasticsearch为此允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片,原有分片为主分片。有了复制分片既可以防止单节点故障,也可以并行计算单元增强搜索和吞吐量。
    • 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
index 索引
type 类型
id
mapping 映射数据约束
filed 字段
文档 单条数据
cluster集群
node 节点1
node 节点2
shared 分片
replicas 复制

使用方法

  • 用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据
  • 用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

安装步骤

下载安装包

  • 下载安装包
    • linux wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-linux-x86_64.tar.gz
    • windows:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-no-jdk-windows-x86_64.zip

安装

  • 解压到安装目录即可

插件

分词器ik

  • 下载安装包地址和安装版本对应

  • 解压,将解压后的elasticsearch文件夹拷贝到elasticsearch-7.10.1\plugins下,并重命名文件夹为analysis-ik (避免重名)

  • 本地词库:

    • 分词文件plugins\elasticsearch-analysis-ik\config*.dic
    • 分词配置文件:plugins\elasticsearch-analysis-ik\config\IKAnalyzer.cfg.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
      <comment>IK Analyzer 扩展配置</comment>
      <!--用户可以在这里配置自己的扩展字典 -->
      <entry key="ext_dict"></entry>
      <!--用户可以在这里配置自己的扩展停止词字典-->
      <entry key="ext_stopwords"></entry>
      <!--用户可以在这里配置远程扩展字典 -->
      <!-- <entry key="remote_ext_dict">words_location</entry> -->
      <!--用户可以在这里配置远程扩展停止词字典-->
      <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    
  • 验证:IK提供两种分词ik_smart(最粗粒度的拆分)和ik_max_word(做最细粒度的拆分)

    • 请求:http://127.0.0.1:9200/_analyze
    • 请求体:{"analyzer":"ik_smart","text":"我是程序员"
    • 请求体:{"analyzer":"ik_max_word","text":"我是程序员"

kibana

  • 下载 与elasticSearch版本一致,node开发实现
  • 安装
    • 解压到安装目录
    • config/kibana.yml 设置服务启动端口和esearch地址
  • 启动
    • bin/kibana.bat 启动即可
  • 验证

配置

  • 指定jdk,修改bin/elasticsearch-env.bat文件,指定安装包自带jdkset JAVA_HOME=D:\test\elasticsearch-7.8.0\jdk,路径不要有中文
  • 修改jvm,conf\jvm.option
  • 修改conf\elasticsearch.yml文件末尾添加,目的是使ES支持跨域请求
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 127.0.0.1

启动

  • 解压即可安装使用,bin目录运行elasticsearch.bat文件即可

验证

Elasticsearch和solr对比

对比项 ElasticSearch solr
分布式管理 自带分布式管理功能 zookeeper
数据格式 仅支持json 多种数据格式
官方功能 注重核心功能,高级功能第三方插件提供 官方提供功能多
搜索应用 实时搜索应用 传统搜索应用

总结

  • Elasticsearch本质上还是数据库,相比普通的关系型数据,功能更加灵活,数据量更大,支持比sql更复杂的规则查询,在搜索引擎或实时数据处理分析方面有很好的应用场景。

猜你喜欢

转载自blog.csdn.net/qq_22973811/article/details/114367062
今日推荐