• Elasticsearch-01-es概念及安装


    1:Elasticsearch概述

    1:什么是Elasticsearch

    Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本
    身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实
    现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得
    简单。

    2:Elasticsearch And Solr

    Lucene 是 Apache 软件基金会 Jakarta 项目组的一个子项目,提供了一个简单却强大
    的 应用程式接口,能够做全文索引和搜寻。在 Java 开发环境里 Lucene 是一个成熟的免费
    开源 工具。就其本身而言,Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程
    序库。 但 Lucene 只是一个提供全文搜索功能类库的核心工具包, 而真正使用它还需要一
    个完善的 服务框架搭建起来进行应用。
    目前市面上流行的搜索引擎软件,主流的就两款: Elasticsearch 和 Solr,这两款都是基
    于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同, 所以两者除了
    服务器安装、部署、管理、集群以外, 对于数据的操作 修改、添加、保存、查询等等都十
    分类似。
    在使用过程中,一般都会将 Elasticsearch 和 Solr 这两个软件对比,然后进行选型。

    总的来说
    Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
    Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
    Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
    Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch

    3:Elasticsearch能做什么

    • 你有一个在线网上商城,提供用户搜索你所卖的商品功能。在这个例子中,你可以使用Elasticsearch去存储你的全部的商品目录和存货清单并且提供搜索和搜索自动完成以及搜索推荐功能。
    • 你想去收集日志或者业务数据,并且去分析并从这些数据中挖掘寻找市场趋势、统计资料、摘要信息或者反常情况。在这个例子中,你可以使用Logstash(part of the Elasticsearch/Logstash/Kibana stack)去收集、聚合并且解析你的数据,然后通过Logstash将数据注入Elasticsearch。一旦数据进入Elasticsearch,你就可以运行搜索和聚集并且从中挖掘任何你感兴趣的数据。
    • 你运行一个价格预警平台,它可以让那些对价格精明的客户指定一个规则,比如:“我相中了一个电子产品,并且我想在下个月任何卖家的这个电子产品的价格低于多少钱的时候提醒我”。在这个例子中,你可以抓取所有卖家的价格,把价格放入Elasticsearch并且使用Elasticsearch的反向搜索(过滤器/抽出器)功能来匹配价格变动以应对用户的查询并最终一旦发现有匹配结果时给用户弹出提示框。
    • 你有分析学/商业情报的需求并且想快速审查、分析并使用图像化进行展示,并且在一个很大的数据集上查询点对点的问题(试想有百万或千万的记录)。在这个例子中,你可以使用Elasticsearch去存储你的数据然后使用Kibana(part of the Elasticsearch/Logstash/Kibana stack)去构建定制化的仪表盘。这样你就可以很直观形象的了解对你重要的数据。此外,你可以使用Elasticsearch的集成功能,靠你的数据去展现更加复杂的商业情报查询。

    2:Elasticsearch简单安装-windows

    1:下载

    Elasticsearch 的官方地址: https://www.elastic.co/cn/
    注:elasticsearch是基于java开发的,所以安装之前需要先安装版本大于等于1.8的jdk,我这里安装的1.8的
    查看es和jdk对应版本
    在这里插入图片描述

    2:修改配置

    Windows 版的 Elasticsearch 的安装很简单,解压即安装完毕, 解压后的 Elasticsearch的目录结构如下:
    在这里插入图片描述
    在这里插入图片描述
    我们可以更改config/elasticsearch.yml来改变默认的配置

    单机的话无非就是更改一下内存大小或者端口号之类的。
    注意:9300端口为Elasticsearch集群间组件的通信端口,9200为浏览器方位的http协议的端口

    cluster.name: elasticsearch
    配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
    node.name: "Franz Kafka"
    节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
    node.master: true
    指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
    node.data: true
    指定该节点是否存储索引数据,默认为true。
    index.number_of_shards: 5
    设置默认索引分片个数,默认为5片。
    index.number_of_replicas: 1
    设置默认索引副本个数,默认为1个副本。
    path.conf: /path/to/conf
    设置配置文件的存储路径,默认是es根目录下的config文件夹。
    path.data: /path/to/data
    设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
    path.data: /path/to/data1,/path/to/data2
    path.work: /path/to/work
    设置临时文件的存储路径,默认是es根目录下的work文件夹。
    path.logs: /path/to/logs
    设置日志文件的存储路径,默认是es根目录下的logs文件夹
    path.plugins: /path/to/plugins
    设置插件的存放路径,默认是es根目录下的plugins文件夹
    bootstrap.mlockall: true
    设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和 ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
    network.bind_host: 192.168.0.1
    设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。 
    network.publish_host: 192.168.0.1
    设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
    network.host: 192.168.0.1
    这个参数是用来同时设置bind_host和publish_host上面两个参数。
    transport.tcp.port: 9300
    设置节点间交互的tcp端口,默认是9300。
    transport.tcp.compress: true
    设置是否压缩tcp传输时的数据,默认为false,不压缩。
    http.port: 9200
    设置对外服务的http端口,默认为9200。
    http.max_content_length: 100mb
    设置内容的最大容量,默认100mb
    http.enabled: false
    是否使用http协议对外提供服务,默认为true,开启。
    gateway.type: local
    gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,和amazon的s3服务器。
    gateway.recover_after_nodes: 1
    设置集群中N个节点启动时进行数据恢复,默认为1。
    gateway.recover_after_time: 5m
    设置初始化数据恢复进程的超时时间,默认是5分钟。
    gateway.expected_nodes: 2
    设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
    cluster.routing.allocation.node_initial_primaries_recoveries: 4
    初始化数据恢复时,并发恢复线程的个数,默认为4。
    cluster.routing.allocation.node_concurrent_recoveries: 2
    添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
    indices.recovery.max_size_per_sec: 0
    设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
    indices.recovery.concurrent_streams: 5
    设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
    discovery.zen.minimum_master_nodes: 1
    设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
    discovery.zen.ping.timeout: 3s
    设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
    discovery.zen.ping.multicast.enabled: false
    设置是否打开多播发现节点,默认是true。
    discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
    设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
    下面是一些查询时的慢日志参数设置
    index.search.slowlog.level: TRACE
    index.search.slowlog.threshold.query.warn: 10s
    index.search.slowlog.threshold.query.info: 5s
    index.search.slowlog.threshold.query.debug: 2s
    index.search.slowlog.threshold.query.trace: 500ms
    index.search.slowlog.threshold.fetch.warn: 1s
    index.search.slowlog.threshold.fetch.info: 800ms
    index.search.slowlog.threshold.fetch.debug:500ms
    index.search.slowlog.threshold.fetch.trace: 200ms
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    3:启动

    进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务
    在这里插入图片描述
    使用浏览器访问默认端口 http://localhost:9200,出现这个表示es已已启动
    在这里插入图片描述

    3:Elasticsearch的概念

    0:用数据库概念类比es的概念

    关系型数据库 (mysql)非关系型数据库(Elasticsearch)
    数据库Database索引index
    表Table类型Type(7.x后没有了类型概念,也可以说只有一个默认的_doc类型)
    数据行Row文档Document
    数据列Column字段Field
    约束Schema映射Mapping

    1:索引(index)

    一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的
    索引, 另一个产品目录的索引, 还有一个订单数据的索引。一个索引由一个名字来标识(必
    须全部是小写字母) ,并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时
    候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

    索引(index)类似于关系型数据库里的“数据库”——它是我们存储和索引关联数据的地方。
    索引名。这个名字必须是全部小写,不能以下划线开头,不能包含逗号

    2:类型(type)

    在一个索引中, 你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具 有一组共同字段的文档定义一个类型。不同的版本,类型发生了不同的变化
    在这里插入图片描述

    3:文档(Document)

    文档是es中的最小数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以去存储多个document。

    4:字段(field)

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

    5:映射(mapping 类似数据库的约束)

    mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理 ES 里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

    6:分片

    一个索引可以存储超出单个节点硬件限制的大量数据。比如, 一个具有 10 亿文档数据
    的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处
    理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,
    每一份就称之为分片。当你创建一个索引的时候, 你可以指定你想要的分片的数量。每个分
    片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节
    点 上。
    分片很重要,主要有两方面的原因:

    • 允许你水平分割 / 扩展你的内容容量。
    • 允许你在分片之上进行分布式的、并行的操作, 进而提高性能/吞吐量。

    7:副本

    在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处
    于 离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并
    且是 强烈推荐的。为此目的, Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝
    叫做复 制分片(副本)。
    复制分片之所以重要,有两个主要原因:

    • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
    • 扩展你的搜索量/吞吐量, 因为搜索可以在所有的副本上并行运行。

    后续的使用在同专栏的其他篇章

  • 相关阅读:
    Prometheus配置Basic Auth进行安全防护,实现登录控制
    谨慎使用多线程中的 fork !!!!
    如何修改 sensor 输出帧率
    SquareCTF-2023 Web Writeups
    走出迷宫的最短路径
    Linux 安装 cuda
    企业如何走出固定资产管理的困境?
    箭头函数总结
    DevExpress DxUpload实现大文件上传
    RK3588算法盒子maskrom模式下系统烧录
  • 原文地址:https://blog.csdn.net/qq_41694906/article/details/125403631