elasticsearch文档-analysis
elasticsearch文档-analysis
analysis
基本概念
全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为Character Filter(字符过滤器), 这整个的分析算法被称为Analyzer(分析器)。
ES内置了很多Analyzer, 还有很多第三方的Analyzer插件, 比如一些处理中文的Analyzer(中文分词)。
analyzer、 tokenizer、 filter可以在elasticsearch.yml 配置, 下面是配置例子
index :analysis :analyzer :standard :type : standardstopwords :[stop1, stop2]myAnalyzer1 :type : standardstopwords :[stop1, stop2, stop3]max_token_length :500# configure a custom analyzer which is# exactly like the default standard analyzermyAnalyzer2 :tokenizer : standardfilter :[standard, lowercase, stop]tokenizer :myTokenizer1 :type : standardmax_token_length :900myTokenizer2 :type : keywordbuffer_size :512filter :myTokenFilter1 :type : stopstopwords :[stop1, stop2, stop3, stop4]myTokenFilter2 :type : lengthmin :0max :2000
analyzer
ES内置若干analyzer, 另外还可以用内置的character filter, tokenizer, token filter组装一个analyzer(custom analyzer), 比如
index :analysis :analyzer :myAnalyzer :tokenizer : standardfilter :[standard, lowercase, stop]
如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注册, 下面是配置IkAnalyzer的例子
index:analysis:analyzer:ik:alias:[ik_analyzer]type: org.elasticsearch.index.analysis.IkAnalyzerProvider
当一个analyzer在配置文件中被注册到一个名字(logical name)下后,在mapping定义或者一些API里就可以用这个名字来引用该analyzer了,比如
"message":{"type":"string","indexAnalyzer":"ik","searchAnalyzer":"ik"}
如果没有指定索引和搜索用的analyzer,ES会用默认的analyzer来处理,也就是名字(logical name)为default, default_index, default_search的analyzer。 从名字可以看出来,default是索引和搜索时用的默认的analyzer,default_index是索引时用的默认的analyzer, default_search是查询时用的默认analyzer。
下面是在elasticsearch.yml中配置默认analyzer的例子
index:analysis:analyzer:default_index:tokenizer: standardfilter:[standard, lowercase, my_synonym, my_snow]default_search:tokenizer: standardfilter:[standard, lowercase, stop]
或者用这种格式
index.analysis.analyzer.default.type :"mmseg"
一个analyzer可以起若干别名,比如在下面的例子中,standard analyzer可以用alias1或者alias2来引用
index :analysis :analyzer。:standard :alias:[alias1, alias2]type : standardstopwords :[test1, test2, test3]
下面是内置的一些analyzer。
| analyzer | logical name | description |
|---|---|---|
| standard analyzer | standard | standard tokenizer, standard filter, lower case filter, stop filter |
| simple analyzer | simple | lower case tokenizer |
| stop analyzer | stop | lower case tokenizer, stop filter |
| keyword analyzer | keyword | 不分词,内容整体作为一个token(not_analyzed) |
| pattern analyzer | whitespace | 正则表达式分词,默认匹配\W+ |
| language analyzers | lang | 各种语言 |
| snowball analyzer | snowball | standard tokenizer, standard filter, lower case filter, stop filter, snowball filter |
| custom analyzer | custom | 一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter |
tokenizer
ES内置的tokenizer列表。
| tokenizer | logical name | description |
|---|---|---|
| standard tokenizer | standard | |
| edge ngram tokenizer | edgeNGram | |
| keyword tokenizer | keyword | 不分词 |
| letter analyzer | letter | 按单词分 |
| lowercase analyzer | lowercase | letter tokenizer, lower case filter |
| ngram analyzers | nGram | |
| whitespace analyzer | whitespace | 以空格为分隔符拆分 |
| pattern analyzer | pattern | 定义分隔符的正则表达式 |
| uax email url analyzer | uax_url_email | 不拆分url和email |
| path hierarchy analyzer | path_hierarchy | 处理类似/path/to/somthing样式的字符串 |
token filter
ES内置的token filter列表。
| token filter | logical name | description |
|---|---|---|
| standard filter | standard | |
| ascii folding filter | asciifolding | |
| length filter | length | 去掉太长或者太短的 |
| lowercase filter | lowercase | 转成小写 |
| ngram filter | nGram | |
| edge ngram filter | edgeNGram | |
| porter stem filter | porterStem | 波特词干算法 |
| shingle filter | shingle | 定义分隔符的正则表达式 |
| stop filter | stop | 移除 stop words |
| word delimiter filter | word_delimiter | 将一个单词再拆成子分词 |
| stemmer token filter | stemmer | |
| stemmer override filter | stemmer_override | |
| keyword marker filter | keyword_marker | |
| keyword repeat filter | keyword_repeat | |
| kstem filter | kstem | |
| snowball filter | snowball | |
| phonetic filter | phonetic | 插件 |
| synonym filter | synonyms | 处理同义词 |
| compound word filter | dictionary_decompounder, hyphenation_decompounder | 分解复合词 |
| reverse filter | reverse | 反转字符串 |
| elision filter | elision | 去掉缩略语 |
| truncate filter | truncate | 截断字符串 |
| unique filter | unique | |
| pattern capture filter | pattern_capture | |
| pattern replace filte | pattern_replace | 用正则表达式替换 |
| trim filter | trim | 去掉空格 |
| limit token count filter | limit | 限制token数量 |
| hunspell filter | hunspell | 拼写检查 |
| common grams filter | common_grams | |
| normalization filter | arabic_normalization, persian_normalization |
character filter
ES内置的character filter列表
| character filter | logical name | description |
|---|---|---|
| mapping char filter | mapping | 根据配置的映射关系替换字符 |
| html strip char filter | html_strip | 去掉HTML元素 |
| pattern replace char filter | pattern_replace | 用正则表达式处理字符串 |
icu plugin
elasticsearch文档-analysis的更多相关文章
- elasticsearch 文档
elasticsearch 文档 文档格式 索引中最基本的单元叫做文档 document. 在es中文档的示例如下: { "_index": "questions&quo ...
- elasticsearch文档-modules
elasticsearch文档-modules modules 模块 cluster 原文 基本概念 cluster: 集群,一个集群通常由很多节点(node)组成 node: 节点,比如集群中的每台 ...
- Elasticsearch文档查询
简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...
- ElasticSearch文档操作介绍三
ElasticSearch文档的操作 文档存储位置的计算公式: shard = hash(routing) % number_of_primary_shards 上面公式中,routing 是一个可变 ...
- Elasticsearch入门教程(四):Elasticsearch文档CURD
原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- ElasticSearch文档及分布式文档存储
1.什么是文档? 文档由索引(_index),类型(_type),唯一标识(_id) 组成,我们为 _index(索引) 分配相关逻辑地址分片,该索引下的数据会根据索引以及类型计算哈希来分配数据存储的 ...
- elasticsearch文档-字段的mapping
mapping == Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types" ...
- elasticsearch文档学习
1.集群 节点(一个elasticsearch实体) 索引 主节点 :集群级别变更,新增或移除节点,索引: 主节点不参与文档级别搜索和变更. 分片(shard):一个完整的搜索引擎,lucene ...
- ElasticSearch文档
1.什么是文档? 程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串.数字.布尔类型.另一个对 ...
随机推荐
- 通俗易懂的语言描述JavaScript原型
这是一个翻译.原文地址http://javascriptissexy.com/javascript-prototype-in-plain-detailed-language/# 原型(prototyp ...
- C#快递跟踪(基于快递100深度定制)
本文主要介绍快递跟踪的相关信息.如根据快递单号预测所属快递公司,判断快递是否已被签收,以及改良官方model后可在不用申请授权的情况下实现json,html,xml及text等多种格式以及单行多行,降 ...
- swift 注意事项 (十六) —— 可选链
可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{ var name } st ...
- CodeForces 14 E - Camels && D - Two Paths
D - Two paths 仅仅想到了一个o(n^2)的解法. 首先枚举删除一条边,必定得到两棵独立的树.计算两棵树的直径.保留最大乘积. 首先两条路不相交,则必定能够分到两棵子树中,由于要乘积最大, ...
- 在Cocos2d-x正在使用SQLlite数据库
SQLite,它是一个轻量级的数据库,合规ACID的关系型数据库管理系统,它的设计目标是嵌入式的,并且眼下已经在非常多嵌入式产品中使用了它,它占用资源非常的低.在嵌入式设备中,可能仅仅须要几百K的内存 ...
- 【百度地图API】——如何让标注自动呈现在最佳视野内
原文:[百度地图API]--如何让标注自动呈现在最佳视野内 摘要: “我有一堆标注,不规则的散落在地图的各个地方,我想把它们展示在一个最佳视野中,怎么办呢?”一位API爱好者咨询道. -------- ...
- Intel 的面试经历中国研究院
那么今天写Intel 的面试经历中国研究院.Intel我采访了面试题比较简单的一. 第一次是在大约下午五时三十, 我正在食堂和好几个基友吃20元巨资买的清蒸草鱼.正在吐沫星子四处飞溅的时候.一个010 ...
- 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在h ...
- Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)
方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...
- PHP激活用户注册验证邮箱
本文将结合实例介绍如何使用PHP+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 注册邮箱激活流程 <ul class='ul_demo''> <li ...