首页 > 代码库 > 【ELK】02、ElasticSearch基础

【ELK】02、ElasticSearch基础


一、搜索引擎

     海量日志如何分析,需要搜索引擎(这只是其中的一种解决方案)

     索引引擎全文搜索依赖全文索引


搜索引擎一般由两部分组成:

      索引链:存储数据并构建索引

            原始内容 --> 获取 --> 构建文档 --> 文档分析(切词)--> 创建索引

      搜索组件:

             UI --> 构建查询 --> 运行查询 (结果返回给UI)<--> 索引

            

            UI(搜索接口):提供用户接口,例如google的输入框


      搜索引擎的索引一般都是倒排索引

倒排索引: 使用字段搜索文档                      

正排索引:使用文档搜索字段


二、lucene

            提供索引链功能,是一个开发库

      文档:Document

               包含了一个或多个域的容器

                field:value


域有很多选项:

           索引选项:用于通过倒排索引来控制文本是否可被搜索

                  Index.ANALYZED

                              分析(切词)并单独作为索引项

                  Index.Not_ANALYZED

                               不分析(不切词),把整个内容当作一个索引项

                  Index.ANALYZED_NORMS

                                 类似于Index:ANALYZED,但不存储token的Norms(加权基准)信息

                  Index.NOT_ANALYZED_NORMS

                                  类似于Index.Not_ANALYZED_NORMS,但不存储token的Norms(加权基准)信息

                  Index.NO:不对此域的值作索引,不可被搜索


            存储选项:是否需要存储域的分析前的真实值

                   store.YES:存储真实值

                   store.NO:不存储真实值


            域向量使用选项:用于在搜索期间控制该文档所有的唯一项都能完全从文档中检索时使用


文档和域的加权操作:

       默认都没有加权值(或都为1),加权计算标准


搜索:

       查询lucene索引时,它返回的是一个有序的scoreDoc对象,查询时,lucene会为每个文档计算出其score,


lucene提供大量的API:

     IndexSearcher:搜索索引入口

     Query及其子类:

     QueryParser:查询分析器

     TopDocs:保存某一次查询操作当中score较高的前10个值

     ScoreDoc:


Lucene支持多样化查询:

      IndexSearch中的search方法:

            TermQuery:对索引中的特定项进行搜索;Term是索引中最小片段,每个Term包含了一个域名和一个文本值

            TermRangQuery:在索引中的多个特定项中进行搜索,能搜索指定的多个域

            NumericRangeQuery:做数值范围搜索

            PrefixQuery:用于搜索以指定字符串开头的项

            BooleanQuery:用于实现组合查询,组合逻辑有:AND,OR,NO

            PhraseQuery:没有分词,根据位置信息对文档进行搜索

            WildcardQuery:通配符查询

            FuzzyQuery:模糊查询,匹配相似的项(域);Levenshtein,距离算法


三、ElasticSearch

1、ElasticSearch简介

        是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统(将1个索引切片成shard实现分布式)。它构建于Apache Lucene搜索引擎库之上。


       ElasticSearch是一个基于Lucene实现的开源、分布式、Restful的全文本搜索引擎,此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索;也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点,实时处理PB级的数据。


2、ElasticSearch的基本组件

索引(index):

        文档的集合(容器),索引是具有类似属性的文档的集合,类似于表,索引名必须使用小写字母

类型(type):

         类型是索引内部的逻辑分区,其意义完全取决于用户需求,一个索引内部可定义一个或多个类型;一般来说,类型就是拥有相同的域的文档的预定义;类似于表的表结构(字段),但没有约束性,

文档(document)

       文档是lucene索引和搜索的原子单位,它包含了一个或多个域,是域的容器,基于JSON格式表示。

     每个域的组成部分:一个名字和一个或多个值,用于多个值的域,通常称为多值域;文档可以嵌套 映射:

         原始内容存储为文档之前需要事先进行分析(例如切词,过滤掉某些词等),映射用于定义此分析机制该如何实现;除此之外,ES还为映射提供了诸如将域中的内容排序等功能,


3、ES的集群组件

Cluster:

       ES的集群标识为集群名称,默认为elasticsearch。节点就是靠此名字来决定加入到哪个集群中,一个节点只能属于一个集群

Node:

        运行了单个ES实例的主机即为节点,用于存储数据、参与集群索引及搜索操作。

        节点的标识靠节点名

Shard:

         将索引切割成为物理存储的组件,但每1个shard都是一个独立且完整的索引

         创建索引时,ES默认将其分割为5个shard,用户也可以按需自定义,创建完成之后不可修改。

    shard有两种类型:

             primary shard:每个索引都会被ES切割成5个primary shard

             replica shard:每个primary shard都至少应该有一个replica shard

                                    用于数据冗余及查询时的负载均衡,每个primary shard的replica的副本数量可自定义,且可动态更改


4、ES Cluster工作过程

        启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之通信。

集群中所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个节点均可接受并响应用户的各类请求。


ES集群的状态:

       green    正常状态

       red        不可用状态

       yellow     修复状态


   

         

        


【ELK】02、ElasticSearch基础