elasticsearch分词

http://xguox.me/elasticsearch-custom-analyzer.html
http://www.rendoumi.com/elasticsearchzhong-de/
http://www.voidcn.com/blog/i6448038/article/p-5994876.html
http://blog.csdn.net/dm_vincent/article/details/41773959

elasticsearch分词涉及的概念

analysis:将文档转换成倒排索引的过程称为analysis(文本分析)
Tokenizer:根据某种算法从文档中提取出若干Token(词元),这个算法称为tokenizer(分词器)
Filter:分词后Token(词元)会被进一步处理,如转成小写,这些进一步的处理算法称为Filter(过滤器)
Analyzer:一个Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter
Frequency:被处理后的结果被称为Term(词),文档中包含了几个这样的Term被称为Frequency(词频)

文本分析(analysis)工作由analyzer(分析器)组件负责。
analyzer由一个分词器(tokenizer)和0个或者多个过滤器(filter)组成,也可能会有0个或者多个字符映射器(character mappers)组成

tokenizer用来把文本拆分成一个个的Token。Token包含了比较多的信息,
比如Term在文本的中的位置及Term原始文本,以及Term的长度。
文本经过tokenizer处理后的结果称为token stream。
token stream其实就是一个个Token的顺序排列。token stream将等待着filter来处理。

filter链将用来处理Token Stream中的每一个token。
这些处理方式包括删除Token,改变Token,甚至添加新的Token。比如变小写,去掉里面的HTML标记,这些处理的算法被称为Character Filter(字符过滤器)

Elasticsearch(2.3) 默认给了我们八种 Analyzers(standard, simple, whitespace, stop, keyword, pattern, language, snowball) 开箱即用.
此外, 还提供给了我们 3 种 CharFilters, 12 种 Tokenizer, 以及一大堆 TokenFilters 用于自定义 Analyzers

Analyzer包含两个核心组件,Tokenizer以及TokenFilter。
两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。
Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,
而TokenFilter则是一个类似的拦截器,其参数可以是TokenStream、Tokenizer

内置分词器(analyzer)
Standard Analyzer standard StandardTokenizer,StandardFilter LowerCaseFilter StopFilter
Simple Analyzer simple LowerCaseTokenizer
Whitespace Analyzer whitespace WhitespaceTokenizer
Stop Analyzer stop LowerCaseTokenizer,StopFilter
Keyword Analyzer keyword KeywordTokenizer
Pattern Analyzer pattern
Language Analyzers lang
Snowball Analyzer snowball StandardTokenizer
Custom Analyzer custom 一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter

内置character filters
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html
mapping char filter:mapping
html strip char filter:html_strip
pattern replace char filter:pattern_replace

内置tokenizers
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html
Standard Tokenizer
Edge NGram Tokenizer
Keyword Tokenizer 不分词
Letter Tokenizer 按单词分
Lowercase Tokenizer letter tokenizer, lower case filter
NGram Tokenizer
Whitespace Tokenizer 以空格为分隔符拆分
Pattern Tokenizer 定义分隔符的正则表达式
UAX Email URL Tokenizer 不拆分url和email
Path Hierarchy Tokenizer处理类似/path/to/somthing样式的字符串
Classic Tokenizer
Thai Tokenizer

内置token filters
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html

Elasticsearch中内置了许多filter,读者也可以轻松地自己实现一个filter。
由一个 Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "autocomplete": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  }
}

首先是定义analysis(文本分析),其中我们先定义了一个文本处理的filter–>autocompletefilter,
然后定义analyzer(分析器),分析器由tokenizer(分词器)和两个过滤器组成,
tokenizer用标准的(standard),filter中一个是内置的lowercase,一个是我们上面定义的autocompletefilter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值