美文网首页
999 - Elasticsearch Analysis 01

999 - Elasticsearch Analysis 01

作者: 歌哥居士 | 来源:发表于2019-05-07 22:01 被阅读0次

    简介

    Analysis在创建索引或搜索时指定,将文本解析成倒排索引,以供搜索。

    简单解释下倒排索引:通常书本的目录就是正排索引,根据目录找章节;而倒排索引就是根据内容(例如一个单词)找所在的章节。

    Analyzer

    analyzer,内置或自定义,是一个包含三个构建块(依次为character filterstokenizerstoken filters)的包。

    例如:一个内置的english analyzer在转换句子The QUICK brown foxes jumped over the lazy dog!时:

    1. 转为小写。
    2. 删除对搜索无意义的词元:the(停止词,stopwords)。
    3. 归纳词干,例如:foxes → fox,jumped → jump,lazy → lazi。
    4. 最后添加这些条件到倒排索引中:[quick, brown, fox, jump, over, lazi, dog]。
    5. 当查询时,可以查询"a query fox",虽然该字符串不在原文本中,但当使用了同样的analyzer时,该句子中的单词与倒排索引中的词元可以匹配上。

    Character filters

    • 接收字符流,通过添加、删除、修改字符来转换字符流。
    • 例如从流中去掉<b>这样的HTML元素。
    • 可以有0或多个,按照设置的顺序调用。

    Tokenizer

    • 接收一个字符流,分解为词元,然后输出词元流。
    • 例如,whitespace tokenizer就会把所有的空白符去掉,"Quick brown fox!"就会被分解成词元:[Quick, brown, fox!]
    • 同时Tokenizer负责记录每个词元的顺序或位置,以及原单词的起始结束字符偏移量。
    • 必须而且只能有一个Tokenizer。

    Token filters

    • 接收词元流,可以添加、删除、修改词元。
    • 例如:lowercase token filter将所有的词元转为小写,stop token filter删除掉停止词,synonym toekn filter将引入同义词到词元流中。
    • Token filter不可以改变每个词元的位置或字符偏移量。
    • 可以有0或多个,按照设置的顺序调用。

    测试analyzers

    可以在请求体中指定analyzer(或者tokenizer、token filter、Character Filter),

    GET _analyze
    {
      "analyzer": "whitespace", 
      "text": "The quick brown fox."
    }
    
    GET _analyze
    {
      "analyzer": "english", 
      "text": "The QUICK brown foxes jumped over the lazy dog!"
    }
    
    GET _analyze
    {
      "tokenizer": "whitespace", 
      "filter": ["lowercase","stop"], 
      "text": "The QUICK brown foxes jumped over the lazy dog!"
    }
    

    从上面第二个的返回结果中可以看到位置和起始结束字符偏移量

    {
      "tokens" : [
        {
          "token" : "quick",
          "start_offset" : 4,
          "end_offset" : 9,
          "type" : "<ALPHANUM>",
          "position" : 1
        },
        {
          "token" : "brown",
          "start_offset" : 10,
          "end_offset" : 15,
          "type" : "<ALPHANUM>",
          "position" : 2
        },
        {
          "token" : "fox",
          "start_offset" : 16,
          "end_offset" : 21,
          "type" : "<ALPHANUM>",
          "position" : 3
        },
        {
          "token" : "jump",
          "start_offset" : 22,
          "end_offset" : 28,
          "type" : "<ALPHANUM>",
          "position" : 4
        },
        {
          "token" : "over",
          "start_offset" : 29,
          "end_offset" : 33,
          "type" : "<ALPHANUM>",
          "position" : 5
        },
        {
          "token" : "lazi",
          "start_offset" : 38,
          "end_offset" : 42,
          "type" : "<ALPHANUM>",
          "position" : 7
        },
        {
          "token" : "dog",
          "start_offset" : 43,
          "end_offset" : 46,
          "type" : "<ALPHANUM>",
          "position" : 8
        }
      ]
    }
    

    相关文章

      网友评论

          本文标题:999 - Elasticsearch Analysis 01

          本文链接:https://www.haomeiwen.com/subject/qfeuoqtx.html