美文网首页
elasticsearch 学习笔记01

elasticsearch 学习笔记01

作者: 咸鱼佬 | 来源:发表于2018-10-22 20:05 被阅读21次

优势

  1. 使用门槛低、开发周期短、上线快
  2. 性能好、查询快、实时展示结果
  3. 扩容方便、快速支撑增长迅速的数据

elastic stack

  1. kibana
  2. elasticsearch
  3. logstash
  4. beats

常见术语

  1. 节点:一个elasticsearch 实例、是集群的构成单位
  2. Cluster:由一个或多个节点构成、对外提供服务
  3. Document:Json对象、由字段Field组成、常见的数据类型如下
    1. 字符串:text、keyword
    2. 数值型:long、integer、short、byte、double、float........
    3. 布尔:boolean
    4. 日期:date
    5. 二进制:binary
    6. 范围类型:integer_range,float_range,long_range,date_range,double_range
  4. 每个document都有一个唯一的id标识
    1. 自行指定
    2. es自动生成
  5. document metaData
    1. _index:文档所在的索引名
    2. _type:文档所在的类型名(6.x废弃,默认都是doc)
    3. _id:文档的唯一id
    4. _uid:组合id、由_type和id组成(6.x之后_type不再起作用、等同于_id)
    5. _source:文档的原始json数据、可以从这里获取每个字段的内容
    6. _all:整合所有字段内容到该字段、默认禁用、耗时长、并且不常用
  6. Index:索引中存储具有相同结构的文档(Document)
    1. 每个索引都有自己的mapping定义、用于定义字段名和类型
    2. 一个集群可以有多个索引
  7. 正排索引:文档Id到文档内容、单词的关联关系(mysql索引)
  8. 倒排索引:单词到文档id的关联关系、每个字段都有自己独立的倒排索引、倒排索引包含以下两部分
    1. 单词词典 Term Dictionary
      1. 记录了所有文档的单词、一般都比较大
      2. 记录了单纯到倒排列表的关联信息
    2. 倒排列表 Posting List 记录了单词对应的文档的集合、由倒排索引项组成
      1. 文档id、用于获取原始信息
      2. 单词频率TF(Term Frequency)、记录改单词在该文档中出项的次数、用于后续的相关性算分
      3. 位置Position 记录单纯在文档中的分词位置 多个,用于做词语搜索 Phrase Query
      4. 偏移Offset 记录单词在文档的开始和结束位置、用于做高亮显示

常用API

创建索引

image.png
创建文档
image.png
image.png
查询文档
image.png
image.png
批量创建文档
image.png
批量查询文档
image.png

倒排索引查询过程

image.png

查询包含“搜索引擎”的文档

  1. 通过查询倒排索引获得“搜索引擎”对应的文档Id有1和3
  2. 通过正排索引查询1 和 3 的完整内容
  3. 返回用户最终结果

分词

分词是将文本转成一系列单词(term or token)的过程、也可以叫做文本分析、es里面称为Analysis

分词器

分词器是es 专门处理分词的组件、英文为Analyzer,由以下组成

  1. character filters 针对原始文本进行处理、比如去除html特殊标记符
  2. tokenizer 将原始文本按照一定规则切分为单词
  3. token filters 针对tokenizer 处理的单词进行再加工、比如小写、删除或新增等处理

es提供了一个测试分词的api接口、方便验证分词的效果、endpoint是_analyze

  1. 可以直接指定analyzer进行测试
  2. 可以直接指定索引中的字段进行测试
  3. 可以自定义分词器进行测试
image.png
image.png

分词的使用说明

分词会在以下两个时机使用

  1. 创建或更新文档时、会对相应的文档进行分词处理
  2. 查询时、会对查询语句进行分词

Mapping

类似数据库中的表结构定义、主要作用如下:

  1. 定义Index下的字段名 field name
  2. 定义字段的类型、比如数值型、字符串型、布尔型
  3. 定义倒排索引相关的配置、比如是否索引、记录position等

Mapping中的字段类型一旦设定之后、禁止直接修改、原因如下
Lucene实现的倒排索引生成后不允许修改

但是允许新增字段
可以通过设置dynamic参数控制字段的新增

  • true默认值、运行自动新增字段
  • false不允许新增字段、但是文档可以正常写入、但是无法对字段进行查询等操作
  • strict 文档不能写入、直接报错

copy_to属性

将该字段的值复制到目标字段、实现类似_all的作用、但是这个字段不会出现在_source中、只能用来搜索

image.png
image.png

index和index_optoins 属性

index 属性 控制当前字段是否索引、默认为true、即记录索引、false不记录、即不可搜索

index_options 用于控制倒排索引记录的内容、有如下四种配置

  • docs 只记录doc id
  • freqs 记录doc id 和 term frequencies
  • positions 记录doc id 、term frequencies 和term position
  • offset 记录doc id term frequencies term position 和character offsets

text类型默认配置是position 其他默认为docs
记录内容越多、占用空间越大

null_value

当字段类型遇到null值得处理策略默认为null此时es回忽略该值、可以通过设定该值设定字段的默认值

image.png

相关文章

网友评论

      本文标题:elasticsearch 学习笔记01

      本文链接:https://www.haomeiwen.com/subject/iikgzftx.html