• ES散记


    安装介绍

    目录结构

    配置的建议

    Xms和Xms设置成一样
    Xmx不要超过机器内存的50%
    不要超过30GB- https://www.elastic.co/blog/a-heap-of-trouble
    config/jvm/options
    7.1 默认1GB

    插件

    bin/elasticsearch-plugin list 查看已安装哪些插件
    bin/elasticsearch-plugin install analysis-icu 安装
    get /_cat/plugins

    kibana

    bin/kibane-plugin install plugin_location
    bin/kibana-plugin list
    bin/kibana remove
    

    多实例运行

    bin/elasticsearch-E node.name=node1 -E cluster.name-geektime -E path.data=node1_data -d
    bin/elasticsearch-E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -d
    bin/elasticsearch-E node.name=node3 -E cluster.name=geektime -E path.data=node3_data -d
    

    删除进程ps grep I elasticsearch/kill pid
    /_cat/nodes

    基本概念

    mapping
    setting

    • Index-索引是文档的容器,是一类文档的结合
      • Index体现了逻辑空间的概念:每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型
      • Shard体现了物理空间的概念:索引中的数据分散在Shard上
    • 索引的Mapping与Settings
      • Mappirng定义文档字段的类型
      • Setting定义不同的数据分布 //定义分片数等

    index

    名词:一个Elasticsearch集群中,可以创建很多个不同的索引
    动词:保存一个文档到Elasticsearch的过程也叫索引(indexing)。
    ES中,创建一个倒排索引的过程
    名词:一个B树索引,一个倒排索引

    与数据库的类比

    其他查看操作

    分布式系统的可用性与扩展性

    • 高可用性
      • 服务可用性-允许有节点停止服务o数据可用性-部分节点丢失,不会丢失数据
    • 可扩展性
      • 请求量提升/数据的不断增长(将数据分布到所有节点上)

    节点、集群

    分布式架构的好处

    • 存储的水平扩容
    • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
      ES 集群分布式架构
    • 不同的集群通过不同的名字来区分,默认名字“elasticsearch”
    • 通过配置文件修改,或者在命令行中-E cluster.name=geektime 进行设定
    • 一个集群可以有一个或者多个节点

    节点

    节点是一个Elasticsearch的实例
    本质上就是一个JAVA进程
    一台机器上可以运行多个Elasticsearch 进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例
    每一个节点都有名字,通过配置文件配置,或者启动时候-E node.name=node1指定
    每一个节点在启动之后,会分配一个UID,保存在data目录下

    Master-eligible nodes和Master Node

    eligible 合格者;适任者;有资格者

    • 每个节点启动后,默认就是一个Master eligible节点
    • 可以设置node.master:false禁止
    • Master-eligible节点可以参加选主流程,成为Master 节点
    • 当第一个节点启动时候,它会将自己选举成Master节点
    • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
    • 集群状态(Cluster State),维护了一个集群中,必要的信息
    • 所有的节点信息
    • 所有的索引和其相关的Mapping与Setting 信息分片的路由信息
    • 任意节点都能修改信息会导致数据的不一致性

    GET /_cluster/health
    GET /_cat/nodes
    查看集群状态
    Green-主分片与副本都正常分配
    Yellow-主分片全部正常分配,有副本分片未能正常分配
    Red-有主分片未能分配

    • 例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引

    Data Node & Coordinating Node

    Data Node :
    可以保存数据的节点,叫做 Data Node。负责保存分片数据。在数据扩展上起到了至关重要的作用
    Coordinating Node:

    • 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起
    • 每个节点默认都起到了Coordinating Node的职责
      Hot & Warm Node
      Machine Learning Node
      Tribe Node(5.3开始使用Cross Cluster Serarch)

    配置节点类型

    分片

    主分片

    • 每个分片就是一个lucene实例
    • 主分片数在索引创建时指定,后续不允许修改,除非Reindex

    副本分片

    • 解决数据高可用
      • 副本分片数,可以动态调整
      • 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

    分片设定

    对于生产环境中分片的设定,需要提前做好容量规划

    • 分片数设置过小
      • 导致后续无法增加节点实现水平扩展
      • 单个分片的数据量太大,导致数据重新分配耗时
    • 分片数设置过大,7.0开始,默认主分片设置成1,解决了over-sharding的问题 over-sharding??
      • 影响搜索结果的相关性打分,影响统计结果的准确性
      • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

    文档操作

    //可指定也可以不指定,已经存在的id会报错
    PUT index/_create/1  
    POST index/_doc
    {}
    
    GET index/_doc/id
    
    POST index/_update/id
    {
     "doc":{ "name" : "TOM" }
    }
    Update方法不会删除原来的文档,而是实现真正的数据更新. Post方法/Payload需要包含在"doc"中
    

    Bulk

    支持在一次API调用中,对不同的索引进行操作
    支持四种类型操作
    Index、Create、Update、Delete
    可以在URI中指定Index,也可以在请求的Payload中进行
    操作中单条操作失败,并不会影响其他操作
    返回结果包括了每一条操作执行的结果

    批量读取mget

    msearch

    倒排索引

    单词词典

    记录所有文档的单词,单词与倒排列表的关联关系
    单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入与查询

    倒排列表

    记录了单词对应的文档结合,由倒排索引项组成

    • 倒排索引项
      文档ID
      词频TF-该单词在文档中出现的次数,用于相关性评分
      位置(Position)-单词在文档中分词的位置。用于语句搜索(phrase query)
      偏移(Offset)-记录单词的开始结束位置,实现高亮显示

    Elasticsearch的JSON文档中的每个字段,都有自己的倒排索引
    可以指定对某些字段不做索引
    优点:节省存储空间
    缺点:字段无法被搜索

    分词

    Analysis-文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词
    Analysis是通过Analyzer来实现的

    • 可使用Elasticsearch内置的分析器/或者按需定制化分析器

    analyerd组成

    Character Filters(针对原始文本处理,例如去除html)
    Tokenizer(按照规则切分为单词)
    Token Filter(将切分的的单词进行加工,小写,删除stopwords,增加同义词)
    内置分词器:

    _analyer API

    3种测试方式

    中文分词

    ik
    THULAC

    聚合

    基本聚合操作

    对text进行terms,需要打开fielddata。
    Keyword默认支持fielddata
    Text需要在Mapping 中enable。会按照分词后的结果进行.
    {}

    如果对text类型 field 进行统计,使用 field.keyword


    cardinality 去重统计

    Range&histrogram分桶


    可以指定key获取

    pipeline

    管道的概念:支持对聚合分析的结果,再次进行聚合分析
    指定路径 >


    也支持status_bucket

    聚合的作用范围

    query
    filter
    post field
    global

    filter:

    post_filter

    globa,忽略query的作用范围

    排序

    • 默认按count降序
    • 指定size,返回对应同
    • 自定义order,按count和key排序

      可指定其他agg

    并发控制

    3种方式

    自动补全与上下文提示


    1.定义mapping时使用 type "completion"
    2.索引数据
    3.运行“suggest”查询,得到搜索建议

    Context Suggest


    精准度和召回率

    部分截图及资源来自极客时间

  • 相关阅读:
    Wannafly Camp 2020 Day 2D 卡拉巴什的字符串
    [POI2010] GIL-Guilds
    Wannafly Camp 2020 Day 1D 生成树
    [AH2017/HNOI2017] 影魔
    机器学习之决策树
    终端多窗口分屏Terminator
    python的面对对象
    安装 Google BBR 加速VPS网络
    DNSLOG在渗透测试中的玩法儿
    如何利用GitHub搜索敏感信息
  • 原文地址:https://www.cnblogs.com/bigorang/p/13536310.html
Copyright © 2020-2023  润新知