Elasticsearch 2.2.0 分词篇:分析模块

    在Elasticsearch中,索引分析模块是可以通过注册分词器(Analyzer)来进行配置。分词器的作用是当一个文档被索引的时候,分词器从文档中提取出若干词元(Token)来支持索引的存储和搜索。

    分词器是由一个分解器(Tokenizer)和零个或多个词元过滤器(token filters)组成。分解器处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为字符过滤器(Character Filter),一个分解器会有一个或多个字符过滤器分解器是用来分解字符串一系列术语或词元(Token)。一个简单的分解器是把一个句子当遇到空格或标点符号是进行分解成一个个的索引词。Elasticsearch内置了分解器,同时也支持自定义分解器。

    元过滤器的作用是对分词器提取出来的Token(词元)被进一步处理, 比如转成小写,增加同义词等。被处理后的结果被称为Term(索引词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。

    ES内置了很多Analyzer, 还有很多第三方的Analyzer插件, 比如一些处理中文的Analyzer(中文分词)。

    一个索引分析模块由一个分词器(Analyzer),分解器(Tokenizer)和词元过滤器(token filters)组成。如果没有明确的定义分析模块,系统会用内置的分词器,分解器,和过滤器。下面是一个分析器的配置:

index :
    analysis :
        analyzer :
            standard :
                type : standard
                stopwords : [stop1, stop2]
            myAnalyzer1 :
                type : standard
                stopwords : [stop1, stop2, stop3]
                max_token_length : 500
            # configure a custom analyzer which is            
            # exactly like the default standard analyzer
            myAnalyzer2 :
                tokenizer : standard
                filter : [standard, lowercase, stop]
        tokenizer :
            myTokenizer1 :
                type : standard
                max_token_length : 900
            myTokenizer2 :
                type : keyword
                buffer_size : 512
        filter :
            myTokenFilter1 :
                type : stop
                stopwords : [stop1, stop2, stop3, stop4]
            myTokenFilter2 :
                type : length
                min : 0
                max : 2000

   当没有明确的定义分词器模块,系统会用内置的分词器,系统有一个配置选项来定义哪个分词器将在默认情况下使用。默认的逻辑名称下有一个的分词器,将用于索引和搜索。配置参数为default_search。例如:

index :
  analysis :
    analyzer :
      default :
        tokenizer : keyword

    分词器可以通过别名来查找相关的分词器来分词。例如,以下将允许标准分词器也可参照alias1和alias2值。

index :
  analysis :
    analyzer :
      standard :
        alias: [alias1, alias2]
        type : standard
        stopwords : [test1, test2, test3]

    系统默认的分词器有: Standard Analyzer,Simple Analyzer,Whitespace Analyzer,Stop Analyzer,Keyword Analyzer,Pattern Analyzer,Language Analyzers,Snowball Analyzer,Custom Analyzer。

    系统默认的分解器有:Standard Tokenizer,Edge NGram Tokenizer,Keyword Tokenizer,Letter Tokenizer,Lowercase Tokenizer,NGram Tokenizer,Whitespace Tokenizer,Pattern Tokenizer,UAX Email URL Tokenizer,Path Hierarchy Tokenizer,Classic Tokenizer,Thai Tokenizer。

    系统默认的词元过滤器有:Standard Token Filter,ASCII Folding Token Filter,Length Token Filter,Lowercase Token Filter,Uppercase Token Filter,NGram Token Filter,Edge NGram Token Filter,Porter Stem Token Filter,Shingle Token Filter,Stop Token Filter,Word Delimiter Token Filter,Stemmer Token Filter,Stemmer Override Token Filter,Keyword Marker Token Filter,Keyword Repeat Token Filter,KStem Token Filter,Snowball Token Filter,Phonetic Token Filter,Synonym Token Filter,Compound Word Token Filter,Reverse Token Filter,Elision Token Filter,Truncate Token Filter,Unique Token Filter,Pattern Capture Token Filter,Pattern Replace Token Filter,Trim Token Filter,Limit Token Count Token Filter,Hunspell Token Filter,Common Grams Token Filter,Normalization Token Filter,CJK Width Token Filter,CJK Bigram Token Filter,Delimited Payload Token Filter,Keep Words Token Filter,Keep Types Token Filter,Classic Token Filter,Apostrophe Token Filter,Decimal Digit Token Filter。

    系统默认带的字符过滤器有:Mapping Char Filter,HTML Strip Char Filter,Pattern Replace Char Filter。

分析模块的使用可以通过索引分析来进行体现。比如:

请求:POST http://127.0.0.1:9200/_analyze/

参数:

{
  "tokenizer": "standard",
  "filters": [
    "lowercase",
    "stop"
  ],
  "text": "SecIsland is a data company."
}

注意"analyzer","tokenizer","filters"三个是关键字。analyzer在内容上包括tokenizer和filters,所以可以只输入analyzer,或者tokenizer和filters。

得到的结果是:

{
    "tokens": [
        {
            "token": "secisland", 
            "start_offset": 0, 
            "end_offset": 9, 
            "type": "<ALPHANUM>", 
            "position": 0
        }, 
        {
            "token": "data", 
            "start_offset": 15, 
            "end_offset": 19, 
            "type": "<ALPHANUM>", 
            "position": 3
        }, 
        {
            "token": "company", 
            "start_offset": 20, 
            "end_offset": 27, 
            "type": "<ALPHANUM>", 
            "position": 4
        }
    ]
}

   赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注

转载于:https://my.oschina.net/secisland/blog/617470

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值