(2)ElasticSearch文档的基本操作与分词

一、文档的基本CRUD与批量操作

1、文档的CRUD操作
(1)Type名,约定都用_doc
(2)Create:如果ID已经存在,会失败
(3)Index:如果ID不存在,创建新的文档。否则,先删除现有的文档,在创建新的文档,版本会增加。
(4)Update:文档必须已经存在,更新只会对相应字段做增量修改
在这里插入图片描述

2、Create一个文档
(1)支持自动生成文档ID和指定文档ID两种方式
(2)通过调用“post movies/_doc”,系统会自动生成dociment id
在这里插入图片描述
在这里插入图片描述

(3)使用http put movies/_create/1创建时,url中显示指定_create,此时如果该id的文档已经存在,操作失败
在这里插入图片描述
3、Get一个文档
(1)找到文档,返回HTTP 200

  • 版本信息,同一个id的文档,即使被删除,Version号也会不断增加
  • _source中默认包含了文档的所有原始信息

(2)找不到文档,返回HTTP 404
在这里插入图片描述
在这里插入图片描述

4、Index文档
(1)Index和Create的区别:如果文档不存在,就索引新的文档。否则现有的文档会被删除,新的文档被索引并且版本+1
在这里插入图片描述
在这里插入图片描述

5、Update文档
(1)Update方法不会删除原来的文档,而是实现真正的数据更新
(2)Post方法/Payload需要包含在“doc”中
在这里插入图片描述
在这里插入图片描述

6、bulk api
(1)支持一次API调用中,对不同的索引进行操作
(2)支持四种类型

  • index
  • create
  • update
  • delete

(3)可以在url中指定index,也可以在请求的payload中进行
(4)操作中单条操作失败,并不会影响其他操作
(5)返回结果包括了每一条操作执行的结果
在这里插入图片描述
7、批量读取
(1)批量操作,可以减少网络连接所产生的开销
在这里插入图片描述

二、倒排索引

(1)要理解正排索引和倒排索引,可以看以下例子,比如你要找到elasticsearch这个单词
在这里插入图片描述

  • 正排索引就是从文档ID到文档内容再到单词
  • 倒排索引就是从单词到文档内容再到文档ID

(2)倒排索引

  • 单词词典(Term Dictionary),记录所有文档的单词,记录单词到倒排列表的关联关系。单词词典一般比较大,可以通过B+树或者哈希拉链法实现,以满足高性能的插入与查询。
  • 倒排列表(Posting List)记录了单词对应的文档结合,由倒排索引项组成

(3)倒排索引项

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

elasticsearch单词对应的倒排索引,例子如下:
在这里插入图片描述

(4)ElasticSearch的倒排索引

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

三、Analyze分词

1、Analyze的基本定义
(1)Analysis与Analyzer

  • Analysis:文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词
  • Analysis:是通过Analyzer来实现的,可使用ElasticSearch内置的分析器/或者按需要定制化分析器
  • 除了在数据写入时转换词条,匹配Query语句时也需要用相应的分析器对查询语法进行分析

(2)分词器是专门处理分词的组件,Analyzer由三部分组成。Character Filters(针对原始文本处理,例如去除html)/Tokenizer(按照规则切分单词)/Token Filter(将切分的单词进行加功,小写,删除stopword(例如:in、on、the等),增加同义词)
在这里插入图片描述

(3)ElasticSearch的内置分词器

  • Standard Analyzer:默认分词器,按照词切分,小写处理
  • Simple Analyzer:按照非字母切分(符号被过滤),小写处理
  • Stop Analyzer:小写处理,停用词过滤(the,a,is)
  • Whitespace Analyzer:按照空格切分,不转小写
  • Keyword Analyzer:不分词,直接将输入当作输出
  • Patter Analyzer:正则表达式,默认\W+(非字符分割)
  • Language:提供了30多种常见语言的分词器
  • Customer Analyzer:自定义分词器

(4)使用_analyzer

  • 直接使用指定Analyzer进行测试

在这里插入图片描述
在这里插入图片描述

  • 指定索引的字段进行测试,默认使用Standard 分词器
    在这里插入图片描述

  • 自定义分词进行测试
    在这里插入图片描述
    在这里插入图片描述

2、Analyze的类型
(1)Standard Analyzer

  • 默认分词器

  • 按词切分

  • 小写处理
    在这里插入图片描述
    (2)Simple Analyzer

  • 按照非字母切分,非字母的都被去除

  • 小写处理
    在这里插入图片描述

(3)Whitespace Analyzer

  • 按照空格切分
    在这里插入图片描述

(4)Stop Analyzer

  • 相比Simple Analyzer
  • 多了stop filter,会把the、is、a等修饰性词去掉
    在这里插入图片描述

(5)Keyword Analyzer

  • 不分词,直接将输入当一个term输出
    在这里插入图片描述

(6)Pattern Analyzer

  • 通过正则表达式进行分词
  • 默认式是\W+,非字符的符号进行分隔
    在这里插入图片描述

(7)Language Analyzer

  • 为不同的语言提供了不同的Analyzer
    在这里插入图片描述
    三、中为分词

(1)、中为分词的难点

  • 中文句子,切分成一个一个词(不是一个个字)
  • 英文中,单词有自然的空格作为分隔
  • 一句中文,在不同的上下文,有不同的理解,例如:这个苹果,不大好吃\这个苹果,不大,好吃
  • 一些例子,他说的确实在理/这事的确确定不下来

(2)ICU Analyzer

  • 需要安装plugin,Elasticsearch-plugin install analysis-icu
  • 提供了Unicode的支持,更好的支持亚洲语言
    在这里插入图片描述
    如果用standard分词,那么会把语句分词一个个中文
    在这里插入图片描述
    在这里插入图片描述
    如果用icu_analyzer分词,因为icu_analyzer支持中文较好,会根据语义分词
    在这里插入图片描述

在这里插入图片描述

(3)更好的、更智能的中文分词器

  • ik
    支持自定义词库,支持热更新分词词典
    https://github.com/medcl/elasticsearch-analysis-ik/tree/master
    ik有两种分词器,如下:

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

我们可以看下”他说的确实在理“在这两个分词器下的效果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • THULAC
    THU Lexucal Analyzer for Chinese,清华大学自然语言处理和社会人文计算实验室的一套中文分词器
    https://github.com/microbun/elasticsearch-thulac-plugin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值