Elasticsearch 学习笔记Day 05

75 阅读5分钟

hi,我是蛋挞,一个初出茅庐的后端开发,希望可以和大家共同努力、共同进步!


开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情

  • 起始标记->Elasticsearch入门(15讲):「13| 基本概念:通过Analyzer进行分词」
  • 结尾标记->Elasticsearch入门(15讲):「14 | 基本概念:Search API概览」

通过Analyzer进行分词

Analysis 与 Analyzer

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

image.png

Analyzer 的组成

  • 分词器 是专门处理分词的组件,Analyzer 由三部分组成
    • Character Filters (针对原始文本处理,例如去除html) / Tokenizer (按照规则切分为单词) / Token Filter (将切分的的单词进行加工,小写,删除stopwords,增加同义词)

image.png

Elasticsearch 的内置分词器

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

使用_analyzer API

  • 直接指定Analyzer进行测试
  • 指定索引的字段进行测试
  • 自定义分词起进行测试

image.png

Standard Analyzer

  • 默认分词器
  • 按词切分
  • 小写处理

image.png

Demo

image.pngimage.png

Simple Analyzer

  • 按照非字母切分,非字母的都被去除
  • 小写处理

image.png

Demo

image.pngimage.png

Whitespace Analyzer

  • 按照空格切分

image.png

Demo

image.pngimage.png

Stop Analyzer

  • 相比 Simple Analyzer
  • 多了stop filter
    • 会把 the,a,is 等修饰性词语去除

image.png

Demo

image.pngimage.png

Keyword Analyzer

  • 不分词,直接将输入当成一个term输出

image.png

Demo

image.png image.png

Pattern Analyzer

  • 通过正则表达式进行分词
  • 默认是 \W+,非字符的符号进行分隔

image.png

Demo

image.pngimage.png

Language Analyzer

Elasticsearch还为不同的国家语言的输入提供了Language Analyzer,可以选择指定不同语言。 image.png

Demo

image.pngimage.png

中文分词的难点

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

ICU Analyzer

  • 需要安装 plugin
    • Elasticsearch-plugin install analysis -icu
  • 提供了Unicode 的支持,更好的支持亚洲语言

image.png

Demo

image.pngimage.pngimage.png

更多的中文分词器

CodeDemo

#Simple Analyzer – 按照非字母切分(符号被过滤),小写处理 #Stop Analyzer – 小写处理,停用词过滤(the,a,is) #Whitespace Analyzer – 按照空格切分,不转小写 #Keyword Analyzer – 不分词,直接将输入当作输出 #Patter Analyzer – 正则表达式,默认 \W+ (非字符分隔) #Language – 提供了30多种常见语言的分词器 #2 running Quick brown-foxes leap over lazy dogs in the summer evening

#查看不同的analyzer的效果 #standard GET _analyze {
"analyzer": "standard",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." } #simpe GET _analyze {
"analyzer": "simple",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

GET _analyze {
"analyzer": "stop",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

#stop GET _analyze {
"analyzer": "whitespace",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

#keyword GET _analyze {
"analyzer": "keyword",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

GET _analyze {
"analyzer": "pattern",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

#english GET _analyze {
"analyzer": "english",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening." }

POST _analyze {
"analyzer": "icu_analyzer",
"text": "他说的确实在理”" }

POST _analyze {
"analyzer": "standard",
"text": "他说的确实在理”" }

POST _analyze { "analyzer": "icu_analyzer",
"text": "这个苹果不大好吃" }

相关阅读

Search API概览

Search API

  • URI Search
    • 指的是使用HTTP GET的方式在URL中使用查询参数
  • Request Body Search
    • 使用Elasticsearch提供的,基于JSON格式的更加完备的Query Domain Specific Language (DSL)

指定查询的索引

image.png

URI查询

  • 使用“q”,指定查询字符串
  • “query string syntax”,KV键值对

image.png

Request Body

image.png

搜索 Response

image.png

搜索的相关性 Relevance

  • 搜索是用户和搜索引擎的对话
  • 用户关心的是搜索结果的相关性
    • 是否可以找到所有相关的内容
    • 有多少不相关的内容被返回了
    • 文档的打分是否合理
    • 结合业务需求,平衡结果排名

image.png

Web 搜索

  • Page Rank算法
    • 不仅仅是内容
    • 更重要的是内容的可信度

image.png

电商搜索

  • 搜索引擎扮演-销售的角色
    • 提高用户购物体验
    • 提升网站销售业绩
    • 去库存

image.png

衡量相关性

  • Information Retrieval
    • Precisioh (查准率) - 尽可能返回较少的无关文档
    • Recall (查全率) - 尽量返回较多的相关文档
    • Ranking -是否能够按照相关度进行排序?

Precision & Recall

  • Precision - True Positive / 全部返回的结果(True and False Positives)
  • Recall - True Positive / 所有应该返回的结果 (True positives + false Negtives)

使用Elasticsearch的查询和相关的参数改善搜索的Precision和Recall image.png

CodeDemo

#URI Query GET kibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie GET kibana*/_search?q=customer_first_name:Eddie GET /_all/_search?q=customer_first_name:Eddie

#REQUEST Body POST kibana_sample_data_ecommerce/_search { "profile": true, "query": { "match_all": {} } }

相关阅读

总结


首先介绍了Elasticsearch内置的一些Analyzer,也学会了使用Analyzer的API来查看分词的情况,以及中文分词应该怎么去做,如何通过下载中文分词的插件满足我们对中文分词的需求。简单介绍了Elasticsearch API 两种主要形式,同时学习了什么叫查询的相关度以及如何衡量相关度。

此文章为2月Day5学习笔记,内容来源于极客时间《Elasticsearch 核心技术与实战》