Elasticsearch底子概念

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3003

Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎;

常见的使用场景


  • 网站搜索,代码搜索等
  • 日志管理与分析,应用体系性能分析,安全指标监控等
  • 数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务
ES基本概念

文档
我们向elasticsearch存储的一条数据,就是一个文档,类似于mysql 数据表中的一条数据.
每个文档都有一个id,可以本身指定,也可以让elasticsearch生成.
元数据
  1. "_index" : "user",
  2. "_id" : "l0D6UmwBn8Enzbv1XLz0",
  3. "_score" : 1.6943597,
  4. "_source" : {
  5.     "user" : "mj",
  6.     "sex" : "男",
  7.     "age" : "18"
  8. }
复制代码


  • _index:文档所属的索引名称.
  • _id:文档的唯一标识.
  • _version:文档的版本信息.
  • _score:文档的相干性打分.
  • _source:文档的原始JSON内容.
索引
一个索引包罗多个文档,类似于mysql中的table,可以对文档元数据举行定义.
索引体现的是一种逻辑空间的概念,每个索引都应该有本身的Mapping定义,用于定义包罗文档的字段名和字段类型,索引的数据分布在分片上
集群
一个elasticsearch集群由多个节点构成,它的分布式架构支持存储程度扩容,而且依赖副本可用性也很高。

节点
一个节点就是一个elasticsearch实例,即一个java历程。节点根据功能可以划分多种角色,比如主节点、数据节点、和谐节点、ingest节点等。默认一个节点这些角色都承担。
分片(shard)


  • 主分片:用于办理数据的程度扩展问题,通过主分片就数据分布在集群内的差别节点上,主分片在创建索引的时间就指定了,背面就不允许修改,除非重新定义Index.
  • 副本:用于办理高可用的问题,分片是主分片的拷贝.副天职片数可以动态的调整,增长副本数量可以在一定的程度上提高服务的可用性.
  1. "settings" : {
  2.     "index" : {
  3.         // 设置主分片数
  4.         "number_of_shards" : "1",
  5.         "auto_expand_replicas" : "0-1",
  6.         "provided_name" : "kibana_sample_data_logs",
  7.         "creation_date" : "1564753951554",
  8.         // 设置副本分片数
  9.         "number_of_replicas" : "1",
  10.         "uuid" : "VVMLRyw6TZeSfUvvLNYXEw",
  11.         "version" : {
  12.             "created" : "7010099"
  13.         }
  14.     }
  15. }
复制代码
倒排索引
Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中全部不重复词的列表构成,对于其中每个词,有一个包罗它的文档列表。
借助官网的例子:假设我们有两个文档,每个文档的 content 域包罗如下内容:
  1. 1. The quick brown fox jumped over the lazy dog
  2. 2. Quick brown foxes leap over lazy dogs in summer
复制代码
为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包罗全部不重复词条的排序列表,然后列出每个词条出现在哪个文档。效果如下所示:
  1. Term      Doc_1  Doc_2
  2. -------------------------
  3. Quick   |       |  X
  4. The     |   X   |
  5. brown   |   X   |  X
  6. dog     |   X   |
  7. dogs    |       |  X
  8. fox     |   X   |
  9. foxes   |       |  X
  10. in      |       |  X
  11. jumped  |   X   |
  12. lazy    |   X   |  X
  13. leap    |       |  X
  14. over    |   X   |  X
  15. quick   |   X   |
  16. summer  |       |  X
  17. the     |   X   |
  18. ------------------------
复制代码
分词器
分词是将文本转化为一系列单词的过程。转化为单词后就可以形成倒排索引 分词是由分词器实现的


  • Standard Analyzer:默认的分词器,按照词切分,并作大写转小写处理
  • Simple Analyzer:按照非字母切分(符号被过滤),并作大写转小写处理
  • Stop Anayzer:停用词(the、is)切分,并作大写转小写处理
  • Whitespace Anayzer:空格切分,不做大写转小写处理
  • IK:中文分词器,需要插件安装
  • ICU:国际化的分词器,需要插件安装
  • jieba:时下盛行的一个中文分词器
Dynamic Mapping
Mapping可以简朴的理解为数据库中的Schema定义,用于定义索引中的字段的名称,定义字段的类型,字段的倒排索引,指定字段使用何种分词器等.Dynamic Mapping意思就是在我们创建文档的时间,如果索引不存在,就会主动的创建索引,同时主动的创建Mapping,ElasticSearch会主动的帮我们推算出字段的类型,固然,也会存在推算不准确的时间,就需要我们手动的设置.常用的字段类型如下:


  • 简朴类型:Text、Date、Integer、Boolean等
  • 复杂类型:对象类型和嵌套类型.
我们可以使用GET /shgx/_Mapping查询索引的Mapping的设置,需要注意的是以下几点:


  • 当我们对索引中的文档新增字段时间,希望可以更新索引的Mapping就可以可以设置Dynamic:true.
  • 对于已经有数据的字段,就不再允许修改其Mapping,由于Lucene生成的倒排索引后就不允许修改.
Dynamic Mapping可以设置三个值,分别是:


  • true:文档可被索引,新增字段也可被索引,Mapping也会被更新.
  • false:文档可被索引,新增字段不能被索引,Mapping不会被更新.
  • strict:新增字段写入,直接报错.
  1. * index:可以设置改字段是否需要被索引到.设置为false就不会生成倒排索引,节省啦磁盘开销
  2. * null_value:可以控制NULL是否可以被索引
  3. * cope_to:将字段值放在一个新的字段中,可以使用新的字段search,但这个字段不会出现在_source中.
  4. * anaylzer:指定字段的分词器
  5. * search_anaylzer:指定索引使用的分词器
  6. * index_options:控制倒排索引的生成结构,有四种情况
  7. * docs:倒排索引只记录文档ID
  8. * freqs:记录文档ID和Term
  9. * positions:记录文档ID、Term和Term Position
  10. * offsets:记录文档ID、Term、Term Position和offsets
  11. * PS:Text类型的字段默认的是Position,其它类型默认的是docs,记录的越多,占用的存储空间就越大.
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表