搜索
    搜索是什么
    Lucene
        特点
            单点,可用性低
            扩展性差,需要自己维护集群和负载

基本定义
    基于Lucene的分布式的Restful风格的搜索、存储和分析引擎

特点
    分布式:节点对等
    高性能:近实时(NTR)搜索,支持处理PB级数据
    高可用:容错性高
    可伸缩:支持横向和纵向扩展
    易维护:开箱即用,文档全面

优势
    面向开发者友好:屏蔽了Lucene的复杂特性
    cluster discovery:集群自动发现
    自动维护数据在多个节点上的建立
    会帮助我们做请求的负载均衡
    自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有有数据的任何丢失
    ES基于Lucene提供了很多高级的功能:复合查询、聚合分析、基于地理位置搜索等
    对于大公司而言,可以构建几百台服务器的大型分布式架构,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
    相比传统数据库,提供了全文检索、同义词处理、相关度排名,聚合分析以及海量数据的近实时处理

应用领域
    搜索引擎(全文检索、高亮、搜索推荐等)
    用户行为日志(用户点击消费、浏览收藏、点赞评论等)
    BI系统,数据分析
    GItHub
    ELK

核心概念
    倒排索引
        数据结构
            包含当前关键词的documentlist
            关键词在每个document中出现的次数,即tern frequency(TF),TF越高,则匹配相关度越高
            关键词在整个索引中出现的次数  inverse document frequency(IDF),IDF越高,则匹配相关度越低
            关键词在当前document中出现的次数
            每个doc的长度,越长相关度越低
            包含这个关键词的所有doc的平均长度
    正排索引
        es官方是建议,es大量是基于os cache来进行缓存和提升性能的,不建议用jvm内存来进行缓存,那样会导致一定的gc开销和oom问题,给jvm更少的内存,给os cache更大的内存。比如64g服务器,给jvm最多4~16g(1/16~1/4),os cache可以提升doc value和倒排索引的缓存和查询效率
    cluster:集群
    node:节点
        (一个节点≠一台服务器主机)
    field:数据字段
    document:文档
        ES的最小数据单元,Json格式
    type:类型
        逻辑分类,ES 7.x取消了type的概念
    index:索引    
        相同或者类似的document的集合
    shard:分片
        两种分片类型
            primary shard:主分片
                再创建索引的时候,除非手动配置了primary shard的数量,否则es默认配置为5个primary,如果需要修改索引的primary的数量,需要重建索引
            replica shard:副本分片
                es默认为每个primary shard分配一个replica shard,replica shard数量可动态修改
        特点
            每一个shard都是一个Lucene实例,具有完整的创建索引和处理搜索请求的能力
            es会自动为我们做shard均衡
            一个dicument不可能同时存在于多个primary shard中,但是可以同时存在于多个replica shard中
            primary shard不能和他的replica shard存在于同一个节点,这不符合高可用的规范,因为一旦节点宕机,主副分片同时丢失,所以最小的可用配置是两个节点,互为主备

ES分布式原理
    高可用
        ES在分配单个索引的分片时会将每个分片尽可能分配到更多的节点上。但是,实际情况取决于集群拥有的分片和索引的数量以及它们的大小,所以这种情况只是理想状况。
        ES不允许Primary和它的Replica放在同一个节点中(为了容错),并且同一个节点不接受完全相同的两个Replica,也就是说,因为同一个节点存放两个相同的副本既不能提升吞吐量,也不能提升查询速度,徒耗磁盘空间。
        每台节点的shard数量越少,每个shard分配的CPU、内存和IO资源越多,单个shard的性能越好,当一台机器一个Shard时,单个Shard性能最好。
        (4)相同资源分配相同的前提下,单个shard的体积越大,查询性能越低,速度越慢
        稳定的Master节点对于群集健康非常重要!理论上讲,应该尽可能的减轻Master节点的压力,分片数量越多,Master节点维护管理shard的任务越重,并且节点可能就要承担更多的数据转发任务,可增加“仅协调”节点来缓解Master节点和Data节点的压力,但是在集群中添加过多的仅协调节点会增加整个集群的负担,因为选择的主节点必须等待每个节点的集群状态更新确认。
        如果相同资源分配相同的前提下,shard数量越少,单个shard的体积越大,查询性能越低,速度越慢,这个取舍应根据实际集群状况和结合应用场景等因素综合考虑
        数据节点和Master节点一定要分开,集群规模越大,这样做的意义也就越大
        数据节点处理与数据相关的操作,例如CRUD,搜索和聚合。这些操作是I / O,内存和CPU密集型的,所以他们需要更高配置的服务器以及更高的带宽,并且集群的性能冗余非常重要
        于仅投票节不参与Master竞选,所以和真正的Master节点相比,它需要的内存和CPU较少。但是,所有候选节点以及仅投票节点都可能是数据节点,所以他们都需要快速稳定低延迟的网络
        高可用性(HA)群集至少需要三个主节点,其中至少两个不是仅投票节点。即使其中一个节点发生故障,这样的群集也将能够选举一个主节点。生产环境最好设置3台仅Master候选节点(node.master = true     node.data = true)
        为确保群集仍然可用,集群不能同时停止投票配置中的一半或更多节点。只要有一半以上的投票节点可用,群集仍可以正常工作。这意味着,如果存在三个或四个主节点合格的节点,则群集可以容忍其中一个节点不可用。如果有两个或更少的主机资格节点,则它们必须都保持可用
    容灾
        第一步:Master选举
            脑裂:可能会产生多个Master节点
            解决:discovery.zen.minimum_master_nodes=N/2+1
        第二步:Replica容错
        第三步:尝试重启故障机
        第四步:数据同步

语法
    CRUD
        创建索引:PUT /索引名称?pretty
        查询索引:GET _cat/indices?v
        删除索引:DELETE /msb_index?pretty
        插入数据:
        更新数据
            全量更新:使用PUT关键字,和插入数据格式相同,会完整替换原始数据
            更新字段
        查询数据
            GET /product/_doc/_search    查询所有
            GET /product/_doc/1    根据id查询
    查询
        Searchtimeout
            默认没有timeout,如果设置了timeout,那么会执行timeout机制
            Timeout机制:假设用户查询结果有1W条数据,但是需要10″才能查询完毕,但是用户设置了1″的timeout,那么不管当前一共查询到了多少数据,都会在1″后ES讲停止查询,并返回当前数据。
            用法:GET /_search?timeout=1s/ms/m
        Query_string
            ①查询所有:GET /product/_search
            ②带参数:GET /product/_search?q=name:xiaomi
            ③分页:GET /product/_search?from=0&size=2&sort=price:asc
        Query DSL
            ①match_all:匹配所有
            ②match:name中包含“nfc”
            ③sort:按照价格倒序排序
            multi_match:根据多个字段查询一个关键词,name和desc中包含“nfc”的doc
            _source 元数据:想要查询多个字段,例子中为只查询“name”和“price”字段。
            ⑥分页(deep-paging):查询第一页(每页两条数据)
        Phrase search:短语搜索,和全文检索相反,“nfc phone”会作为一个短语去检索
        Full-text queries:全文检索
            query-term:不会被分词
            ②match和term区别:
            ③☆全文检索:
        Query and filter:查询和过滤
            bool:可以组合多个查询条件,bool查询也是采用more_matches_is_better的机制,因此满足must和should子句的文档将会合并起来计算分值。
                must:必须满足
                filter:过滤器 不计算相关度分数,cache☆
                3)should:可能满足 or
                must_not:必须不满足 不计算相关度分数   not
                5)minimum_should_match
            案例
                #首先筛选name包含“xiaomi phone”并且价格大于1999的数据(不排序),
#然后搜索name包含“xiaomi”and desc 包含“shouji”
                2)bool多条件 name包含xiaomi 不包含erji 描述里包不包含nfc都可以,价钱要大于等于4999
            嵌套查询:
                minimum_should_match例子
        Compound queries:组合查询
            ①想要一台带NFC功能的 或者 小米的手机 但是不要耳机
            搜索一台xiaomi nfc phone或者一台满足 是一台手机 并且 价格小于等于2999
        Highlight search:高亮
        Deep paging问题
            (1)解释:当你的数据超过1W,不要使用
            (2)返回结果不要超过1000个,500以下为宜
            (3)解决办法:
                ①尽量避免深度分页查询
                ②使用Scroll search(只能下一页,没办法上一页,不适合实时查询)
        Scroll search
    mapping
        查看mapping:GET /product/_mapping
        Dynamic mapping
        精准匹配和全文检索
            exact value 精确匹配:在倒排索引过程中,分词器会将field作为一个整体创建到索引中,
            full text全文检索:分词、近义词同义词、混淆词、大小写、词性、过滤、时态转换等(normaliztion)
        数据类型
            核心类型
                数字
                    long
                    integer
                    short
                    byte
                    double
                    float
                    half_float
                    scaled_float
                日期
                    date
                    date_nanos
                字符串
                    keyword
                    text
                binary(二进制)
                range(区间类型)
                    integer_range
                    float_range
                    long_range
                    double_range
                    date_range
            复杂类型
                Object:用于单个JSON对象
                Nested:用于JSON对象数组
            地理位置
                Geo-shape:用于多边形等复杂形状
                Geo-shape:用于多边形等复杂形状
            特有类型
                IP地址:ip 用于IPv4和IPv6地址
                Completion:提供自动完成建议
                Tocken_count:计算字符串中令牌的数量
                Murmur3:在索引时计算值的哈希并将其存储在索引中
                Annotated-text:索引包含特殊标记的文本(通常用于标识命名实体
                Percolator:接受来自query-dsl的查询
                Join:为同一索引内的文档定义父/子关系
                Rank features:记录数字功能以提高查询时的点击率。
                Dense vector:记录浮点值的密集向量。
                Sparse vector:记录浮点值的稀疏向量。
                Search-as-you-type:针对查询优化的文本字段,以实现按需输入的完成
                Alias:为现有字段定义别名。
                Flattened:允许将整个JSON对象索引为单个字段。
                Shape:shape 对于任意笛卡尔几何
                Histogram:histogram 用于百分位数聚合的预聚合数值。
                Constant keyword:keyword当所有文档都具有相同值时的情况的 专业化
            Constant keyword
                keyword当所有文档都具有相同值时的情况的 专业化
            ES 7新增:
                Date_nanos:date plus 纳秒
                Features:
                Vector:as
        Mapping parameters 
            index
            analyzer
            boost
            coerce
            copy_to
            doc_values
            dynamic
            eager_global_ordinals
            enable
            fielddata
            fields
            format
            ignore_above
            ignore_malformed
            index_options
            Index_phrases
            Index_prefixes
            meta
            normalizer
            norms
            null_value
            position_increment_gap
            proterties
            search_analyzer
            similarity
            store
            term_vector
    聚合查询
        聚合类型
            terms
            aggs
    批量查询:_mget
        语法
            GET /_mget
            GET /<index>/_mget    
    批量增删改:_bulk
        语法
            POST /_bulk
            
POST /<index>/_bulk
        支持的操作类型  Operate
            create
                PUT /index/_create/id/    强制创建
            delete
                删除(lazy delete原理)
            index
                可以是创建,也可以是全量替换
            update
                执行partial update(全量替换,部分替换)
    Scripting
        painless
            支持操作:delete、upsert、noop
            参数化查询
            Stored scripts
        expression
        mustache
        java

分词
    作用
        切词
        ②normalization(提升recall召回率:能搜索到的结果的比率)
    分析器
        character filter:字符过滤
            html_strip:过滤html标签
            mapping:自定义字符映射
            pattern_replace:正则替换
        token filter
        tokenizer:分词器
            内置分词器
                standard 
                其他14种
                自定义分词器
                中文分词器
                    IK
                        analyzer
                            ik_smart:粗粒度
                            ik_max_word:细粒度
                        IK文件描述
                            安装
                                下载:https://github.com/medcl/elasticsearch-analysis-ik
                                创建插件文件夹 cd your-es-root/plugins/ && mkdir ik
                                将插件解压缩到文件夹 your-es-root/plugins/ik
                                重新启动es
                            IKAnalyzer.cfg.xml:词库配置文件
                            词库文件
                                主词库:main.dic
                                英文停用词:stopword.dic
                                quantifier.dic:特殊词库:计量单位等
                                suffix.dic:特殊词库:后缀名
                                surname.dic:特殊词库:百家姓
                                preposition:特殊词库:语气词
                            热更新
                                修改源码

环境
    安装ES
        依赖:JDK
        下载地址:https://www.elastic.co/cn/downloads/elasticsearch
        启动:Linux  ./elasticsearch -d   Windows: bin目录下双击elasticsearch.bat
        验证:http://localhost:9200/
    Head插件:附件
    Kibana:附件
    开发模式和生产模式
        开发模式:
        生产模式:

集群
    健康值检查
        脚本
            ①_cat/health?v
            _cluster/health
                cluster_name:集群名称
                status:健康值状态
                timed_out:是否超时
                number_of_nodes:节点数量
                number_of_data_nodes:数据节点数量
                active_primary_shards:活跃的主分片数
                active_shards:活跃的总分片数
                relocating_shards:迁移中的分片数
                initializing_shards:初始化中的分片数
                unassigned_shards:未分配的分片数
                active_shards_percent_as_number:活跃分片的百分比
        健康值状态
            Green
            Yellow
            Red 
    配置
        node.master:是否为候选节点
        node.data:是否为数据节点
        discovery.zen.minimum_master_nodes:最小投票节点数
    ES-node
        Master:主节点
        voting:投票节点
        coordinating:协调节点
        Master-eligible node:候选节点
        Data node:数据节点
        Ingest node
        Machine learning node:机器学习节点

aggs

底层原理及优化
    并发控制
        悲观锁
        乐观锁

elasticsearch 常见的概念相关推荐

  1. ElasticSearch的基本概念和集群分布式底层实现

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:张勇 http://tech.dianwoda.com/ 深 ...

  2. socket编程中常见的概念问题!

    socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题. 一.常见传输协议 1.tcp协议 TCP (Transmissi ...

  3. lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)

    1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...

  4. 缓存中常见的概念及解决方案

    缓存中常见的概念及解决方案 缓存穿透 1.概念 用户查询数据,在数据库中以及缓存中(redis)都查询不到,导致每次请求来时,缓存(redis)中查询一次,数据库查询一次,最后返回空,每次请求都会有俩 ...

  5. 了解一下Elasticsearch的基本概念

    了解一下Elasticsearch的基本概念 一.前文介绍 Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene 可以 ...

  6. 有关ElasticSearch的基本概念

    本文来说下有关ElasticSearch的基本概念 文章目录 概述 ElasticSearch术语 文档(Document) 索引(Index) 类型(Type) 集群(Cluster) 节点(Nod ...

  7. 计算机网络中 89 个常见的概念

    计算机网络中 89 个常见的概念 主机:计算机网络上任何一种能够连接网络的设备都被称为主机或者说端系统,比如手机.平板电脑.电视.游戏机.汽车等,随着 5G 的到来,将会有越来越多的终端设备接入网络. ...

  8. Elasticsearch常见错误及解决方法

    Elasticsearch常见错误及解决方法: 1.启动时候报错:Caused by: java.net.BindException: Cannot assign requested address ...

  9. 数据仓库常见的概念术语解析

    常见的概念术语解析 一.数仓中常见概念解析 1.实体 2.维度 3.度量 4.粒度 5.口径 6.指标 7.标签 8.自然键 9.持久键 10.代理键 11.退化维度 12.下钻 13.上卷 二.数仓 ...

  10. elasticsearch常见属性单词解释

    一.前言 说实话,刚测试ES的时候,我的内心是崩溃的,好多单词都不知道代表什么意思,只能一边测试,一边查询.看到就赶紧记下来,一天下来,也算是学的七七八八吧.这里分享给大家. 二.ES常见单词解释 1 ...

最新文章

  1. 给大家介绍一位中科院师兄,读研时通过实习和比赛收入五十万
  2. spring cloud 学习之 服务注册和发现(Eureka)
  3. Java中的JDBC是什么?
  4. O’Reilly发布“微服务成熟度状态”报告:微服务是成功的
  5. php 二维数组 根据某个字段排序
  6. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录
  7. ado.net操作数据库
  8. jquery $(document).ready() 与js原生的window.onload的区别总结
  9. Android空调遥控器代码,空调代码—万能遥控器要如何正确设置空调代码?
  10. NSIS安装或卸载时检查程序是否正在运行
  11. MySQL DBLE_MySQL 分库分表 dble简单使用
  12. CS231n课程笔记:神经网络笔记 2
  13. 棋牌游戏网站分析——远航游戏中心
  14. unicode转中文 中文转unicode的简单方式
  15. Windows 平台部署前后端分离项目
  16. matlab循环调用不同变量名变量(不同矩阵名)
  17. oracle连接失败日志文件,Oracle中的联机日志文件发生不同程度损坏的恢
  18. 被遗忘的黑莓,你还活得好么?
  19. Unicode编码规范(摘抄)
  20. 安装不文件不完全_【不完全IT】第4期 安卓刷机

热门文章

  1. 鹰式价差matlab,鹰式期权:什么叫铁鹰式期权组合,蝶式价差期权?
  2. 详解linux下的串口通讯开发
  3. 基于VS + Qt编程的UG/NX二次开发
  4. 科技楼里面有三间计算机教室,中学计算机网络教室管理工作总结
  5. 优优聚:美团,又要抢抖音的短视频生意
  6. mysql查询条件忽略大小写_mysql 查询条件不区分大小写问题
  7. am 启动 activity 流程分析
  8. win10启动修复_高手教你怎样在Win10上修复主引导记录(MBR),轻松解决启动故障...
  9. 我的爬虫入门书 —— 《Python3网络爬虫开发实战(第二版)》
  10. 让机器人告别乱碰乱撞,激光导航让扫地机“睁开双眼”