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 配置, 下面是配置例子

  1. index :
  2. analysis :
  3. analyzer :
  4. standard :
  5. type : standard
  6. stopwords :[stop1, stop2]
  7. myAnalyzer1 :
  8. type : standard
  9. stopwords :[stop1, stop2, stop3]
  10. max_token_length :500
  11. # configure a custom analyzer which is
  12. # exactly like the default standard analyzer
  13. myAnalyzer2 :
  14. tokenizer : standard
  15. filter :[standard, lowercase, stop]
  16. tokenizer :
  17. myTokenizer1 :
  18. type : standard
  19. max_token_length :900
  20. myTokenizer2 :
  21. type : keyword
  22. buffer_size :512
  23. filter :
  24. myTokenFilter1 :
  25. type : stop
  26. stopwords :[stop1, stop2, stop3, stop4]
  27. myTokenFilter2 :
  28. type : length
  29. min :0
  30. max :2000

analyzer

ES内置若干analyzer, 另外还可以用内置的character filter, tokenizer, token filter组装一个analyzer(custom analyzer), 比如

  1. index :
  2. analysis :
  3. analyzer :
  4. myAnalyzer :
  5. tokenizer : standard
  6. filter :[standard, lowercase, stop]

如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注册, 下面是配置IkAnalyzer的例子

  1. index:
  2. analysis:
  3. analyzer:
  4. ik:
  5. alias:[ik_analyzer]
  6. type: org.elasticsearch.index.analysis.IkAnalyzerProvider

当一个analyzer在配置文件中被注册到一个名字(logical name)下后,在mapping定义或者一些API里就可以用这个名字来引用该analyzer了,比如

  1. "message":{
  2. "type":"string",
  3. "indexAnalyzer":"ik",
  4. "searchAnalyzer":"ik"
  5. }

如果没有指定索引和搜索用的analyzer,ES会用默认的analyzer来处理,也就是名字(logical name)为defaultdefault_indexdefault_search的analyzer。 从名字可以看出来,default是索引和搜索时用的默认的analyzer,default_index是索引时用的默认的analyzer, default_search是查询时用的默认analyzer。

下面是在elasticsearch.yml中配置默认analyzer的例子

  1. index:
  2. analysis:
  3. analyzer:
  4. default_index:
  5. tokenizer: standard
  6. filter:[standard, lowercase, my_synonym, my_snow]
  7. default_search:
  8. tokenizer: standard
  9. filter:[standard, lowercase, stop]

或者用这种格式

  1. index.analysis.analyzer.default.type :"mmseg"

一个analyzer可以起若干别名,比如在下面的例子中,standard analyzer可以用alias1或者alias2来引用

  1. index :
  2. analysis :
  3. analyzer。:
  4. standard :
  5. alias:[alias1, alias2]
  6. type : standard
  7. stopwords :[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

icu analysis 插件

 
 
 
标签: elasticsearch

elasticsearch文档-analysis的更多相关文章

  1. elasticsearch 文档

    elasticsearch 文档 文档格式 索引中最基本的单元叫做文档 document. 在es中文档的示例如下: { "_index": "questions&quo ...

  2. elasticsearch文档-modules

    elasticsearch文档-modules modules 模块 cluster 原文 基本概念 cluster: 集群,一个集群通常由很多节点(node)组成 node: 节点,比如集群中的每台 ...

  3. Elasticsearch文档查询

    简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...

  4. ElasticSearch文档操作介绍三

    ElasticSearch文档的操作 文档存储位置的计算公式: shard = hash(routing) % number_of_primary_shards 上面公式中,routing 是一个可变 ...

  5. Elasticsearch入门教程(四):Elasticsearch文档CURD

    原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  6. ElasticSearch文档及分布式文档存储

    1.什么是文档? 文档由索引(_index),类型(_type),唯一标识(_id) 组成,我们为 _index(索引) 分配相关逻辑地址分片,该索引下的数据会根据索引以及类型计算哈希来分配数据存储的 ...

  7. elasticsearch文档-字段的mapping

    mapping == Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types" ...

  8. elasticsearch文档学习

    1.集群 节点(一个elasticsearch实体)  索引  主节点 :集群级别变更,新增或移除节点,索引:  主节点不参与文档级别搜索和变更. 分片(shard):一个完整的搜索引擎,lucene ...

  9. ElasticSearch文档

    1.什么是文档? 程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串.数字.布尔类型.另一个对 ...

随机推荐

  1. linux_inux中find批量删除空文件及空文件夹脚本

    1.{}和之间有一个空格 2.find . -name 之间也有空格 3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件 linux下批量删除空文件(大小等于0的文件)的方法 rm - ...

  2. MVC 缓存1

    MVC 缓存 为什么要讲缓存.缓存到底有什么作用? 下面我们来说一个场景我们有一个首页菜单的布局基本是不会经常发生的变化,如果动态生成的 Web 页被频繁请求并且构建时需要耗用大量的系统资源,那么,如 ...

  3. 魔兽世界服务器Trinitycore分析二:auth server的main函数

    TrinityCore由生成两个运行文件authserver和world server以及一堆DLL(或so)文件的子项目组成(先忽略map_extractor等几个工具项目). authserver ...

  4. F4107Usart数据处理程序

    解决:Cortex-M4上,usart自己主动发送数据计划. 1. usart快速突破.数据还没有被处理.usart中断会把盖掉的数据不被处理. 数据丢失. 2.此过程需要main处理4一个usart ...

  5. Swift # 异常处理

    面向轨道编程 - Swift 中的异常处理 问题 在开发过程中,异常处理算是比较常见的问题了. 举一个比较常见的例子:用户修改注册的邮箱,大概分为以下几个步骤: 接收到一个用户的请求:我要修改邮箱地址 ...

  6. 收集的VS2013的使用小技巧( 不断总结中)

    对于经常使用vs的朋友,如果能用键盘直接做的事,还是键盘更便捷点,现在我就把自己遇到的一些给写下来. 1.对一个函数的说明 先写一个函数,以及参数,完成后,在函数上输入///,vs会自动补全说明的信息 ...

  7. windows批处理研究_不断更新

    windows批处理脚本(bat),很麻烦,主要原因有: 1.bat脚本编写的风格,太古老,调用方式太奇怪. 2.windows自身运行机制就对批处理脚本有兼容性问题.比如,鼠标双击打开一个bat,与 ...

  8. SQL点滴26—常见T-SQL面试解析

    原文:SQL点滴26-常见T-SQL面试解析 它山之石可以攻玉,这一篇是读别人的博客后写下的,不是原原本本的转载,加入了自己的分析过程和演练.sql语句可以解决很多的复杂业务,避免过多的项目代码,下面 ...

  9. automake/autoconf的简单例子

    参考文章1:http://loftor.com/archives/automake.html 参考文章2:http://www.blogjava.net/huyi2006/articles/18790 ...

  10. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...