hi,我是蛋挞,一个初出茅庐的后端开发,希望可以和大家共同努力、共同进步!
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
- 起始标记->Elasticsearch入门(15讲):「13| 基本概念:通过Analyzer进行分词」
- 结尾标记->Elasticsearch入门(15讲):「14 | 基本概念:Search API概览」
通过Analyzer进行分词
Analysis 与 Analyzer
- Analysis -文本分析是把全文本转换一系列单词(term / token) 的过程,也叫分词
- Analysis是通过Analyzer来实现的
- 可使用 Elasticsearch内置的分析器/或者按需定制化分析器
- 除了在数据写入时转换词条,匹配Query语句时候也需要用相同的分析器对查询语句进行分析
Analyzer 的组成
- 分词器 是专门处理分词的组件,Analyzer 由三部分组成
- Character Filters (针对原始文本处理,例如去除html) / Tokenizer (按照规则切分为单词) / Token Filter (将切分的的单词进行加工,小写,删除stopwords,增加同义词)
Elasticsearch 的内置分词器
- Standard Analyzer -默认分词器,按词切分,小写处理
- Simple Analyzer一按照非字母切分(符号被过滤) ,小写处理
- Stop Analyzer -小写处理,停用词过滤(the, a,is)
- Whitespace Analyzer -按照空格切分,不转小写
- Keyword Analyzer -不分词,直接将输入当作输出
- Patter Analyzer -正则表达式,默认\W+ (非字符分隔)
- Language一提供了30多种常见语言的分词器
- Customer Analyzer自定义分词器
使用_analyzer API
- 直接指定Analyzer进行测试
- 指定索引的字段进行测试
- 自定义分词起进行测试
Standard Analyzer
- 默认分词器
- 按词切分
- 小写处理
Demo
Simple Analyzer
- 按照非字母切分,非字母的都被去除
- 小写处理
Demo
Whitespace Analyzer
- 按照空格切分
Demo
Stop Analyzer
- 相比 Simple Analyzer
- 多了stop filter
- 会把 the,a,is 等修饰性词语去除
Demo
Keyword Analyzer
- 不分词,直接将输入当成一个term输出
Demo
Pattern Analyzer
- 通过正则表达式进行分词
- 默认是 \W+,非字符的符号进行分隔
Demo
Language Analyzer
Elasticsearch还为不同的国家语言的输入提供了Language Analyzer,可以选择指定不同语言。
Demo
中文分词的难点
- 中文句子,切分成一个一个词(不是一个个字)
- 英文中, 单词有自然的空格作为分隔
- 一句中文,在不同的上下文,有不通的理解
- 这个苹果,不大好吃/这个苹果,不大,好吃!
- 一些例子
- 他说的确实在理/这事的确定不下来
ICU Analyzer
- 需要安装 plugin
- Elasticsearch-plugin install analysis -icu
- 提供了Unicode 的支持,更好的支持亚洲语言
Demo
更多的中文分词器
- IK
- 支持自定义词库, 支持热更新分词字典
- github.com/medcl/elast…
- THULAC
- THU Lexucal Analyzer for Chinese,清华大学自然语言处理和社会人文计算实验室的一套中文分词器
- github.com/microbun/el…
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)
指定查询的索引
URI查询
- 使用“q”,指定查询字符串
- “query string syntax”,KV键值对
Request Body
搜索 Response
搜索的相关性 Relevance
- 搜索是用户和搜索引擎的对话
- 用户关心的是搜索结果的相关性
- 是否可以找到所有相关的内容
- 有多少不相关的内容被返回了
- 文档的打分是否合理
- 结合业务需求,平衡结果排名
Web 搜索
- Page Rank算法
- 不仅仅是内容
- 更重要的是内容的可信度
电商搜索
- 搜索引擎扮演-销售的角色
- 提高用户购物体验
- 提升网站销售业绩
- 去库存
衡量相关性
- Information Retrieval
- Precisioh (查准率) - 尽可能返回较少的无关文档
- Recall (查全率) - 尽量返回较多的相关文档
- Ranking -是否能够按照相关度进行排序?
Precision & Recall
- Precision - True Positive / 全部返回的结果(True and False Positives)
- Recall - True Positive / 所有应该返回的结果 (True positives + false Negtives)
使用Elasticsearch的查询和相关的参数改善搜索的Precision和Recall
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": {} } }
相关阅读
- www.elastic.co/guide/en/el…
- searchenginewatch.com/sew/news/20…
- www.huffpost.com/entry/searc…
- www.entrepreneur.com/article/176…
- www.searchtechnologies.com/meaning-of-…
- baike.baidu.com/item/%E6%90…
总结
首先介绍了Elasticsearch内置的一些Analyzer,也学会了使用Analyzer的API来查看分词的情况,以及中文分词应该怎么去做,如何通过下载中文分词的插件满足我们对中文分词的需求。简单介绍了Elasticsearch API 两种主要形式,同时学习了什么叫查询的相关度以及如何衡量相关度。
此文章为2月Day5学习笔记,内容来源于极客时间《Elasticsearch 核心技术与实战》