美文网首页
999 - Elasticsearch Analysis 03

999 - Elasticsearch Analysis 03

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

    Word Oriented Tokenizers

    下面的tokenizer主要用来切分文本为单个单词。

    Standard Tokenizer

    • 默认的analyzer,适合大多数语言。
    • 根据Unicode Text Segmentation算法的定义,将文本切分成词元。
    • 示例
    POST _analyze
    {
      "tokenizer": "standard",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    

    产生[ The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone ]

    • 配置参数
    参数 说明
    max_token_length 词元的长度,超过会被分割。默认255。

    示例

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "standard",
              "max_token_length": 5
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    

    产生[ The, 2, QUICK, Brown, Foxes, jumpe, d, over, the, lazy, dog's, bone ]

    Letter Tokenizer

    • 按非字母的切分。
    • 示例
    POST _analyze
    {
      "tokenizer": "letter",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    

    产生[ The, QUICK, Brown, Foxes, jumped, over, the, lazy, dog, s, bone ]

    Lowercase Tokenizer

    • 相当于letter tokenizer+lowercase token filter
    • 示例
    POST _analyze
    {
      "tokenizer": "lowercase",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    

    产生[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

    Whitespace Tokenizer

    • 按空格切分。
    • 示例
    POST _analyze
    {
      "tokenizer": "whitespace",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    
    • 配置参数
    参数 说明
    max_token_length 词元的长度,超过会被分割。默认255。

    UAX URL Email Tokenizer

    • 类似standard tokenizer,只是能够识别邮件地址、URL。
    • 示例
    POST _analyze
    {
      "tokenizer": "uax_url_email",
      "text": "Email me at john.smith@global-international.com"
    }
    

    产生[ Email, me, at, john.smith@global-international.com ]

    如果是standard tokenizer将产生[ Email, me, at, john.smith, global, international.com ]

    • 配置参数
    参数 说明
    max_token_length 词元的长度,超过会被分割。默认255。

    示例

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer":{
              "type": "uax_url_email",
              "max_token_length": 5
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "john.smith@global-international.com"
    }
    

    产生[ john, smith, globa, l, inter, natio, nal.c, om ]

    Partial Word Tokenizers

    这些Tokenizer主要将单词或者文本截取成更小的分段。

    N-Gram Tokenizer

    • 指定保留的字符类型(通过参数token_chars指定,默认[]保留所有),以及根据min_gram以及max_gram指定切分时最小几个字符、最大几个字符。

    • 像一个滑动窗口,例如min_gram为1,max_gram为3,对于Quick这个单词,就会变成[ Q, Qu, Qui, u, ui, uic, i, ic, ick, c, ck, k ]。长度越短,切分出来越少,更多的被匹配到质量也越差;长度越长,切分出来越多,匹配越精确。

    • 示例

    POST _analyze
    {
      "tokenizer": "ngram",
      "text": "Quick Fox"
    }
    

    产生[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]

    • 配置参数
    参数 说明
    min_gram 字符的最小长度。默认为1。
    max_gram 字符的最大长度。默认为2。
    token_chars 字符组见下表。分词时,保留指定的字符组,并根据没有指定的字符组进行切分。例如指定了letter、digit字符组,就会根据whitespace、punctuation、symbol进行切分。
    字符组 说明
    letter 例如 a, b, ï or 京
    digit 例如 3 or 7
    whitespace 例如 " " or "\n"
    punctuation 例如 ! or "
    symbol 例如 $ or √

    示例:保留数字,最小长度是1,最大是3。

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer":{
              "type": "ngram",
              "min_gram": 1,
              "max_gram": 3,
              "token_chars": [
                "digit"
                ]
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "2 Quick Foxes."
    }
    

    产生[ 2 ]

    示例:保留数字和字母,最小最大长度都是3。因为数字2长度为1,小于3,所以结果中没有数字,只剩下字母。

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "ngram",
              "min_gram": 3,
              "max_gram": 3,
              "token_chars": [
                "letter",
                "digit"
              ]
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "2 Quick Foxes."
    }
    

    产生[ Qui, uic, ick, Fox, oxe, xes ]

    Edge N-Gram Tokenizer

    • ngram tokenizer相同,只不过只从单词头开始。例如,min_gram为1,max_gram为3,对于Quick这个单词,就会变成[ Q, Qu, Qui ]
    • 示例

    默认配置:token_chars默认为[]保留全部,不拆分也就是Quick Fox作为一整个单词,min_gram为1,max_gram为2

    POST _analyze
    {
      "tokenizer": "edge_ngram",
      "text": "Quick Fox"
    }
    

    产生[ Q, Qu ]

    配置示例

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "edge_ngram",
              "min_gram": 2,
              "max_gram": 10,
              "token_chars": [
                "letter",
                "digit"
              ]
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "2 Quick Foxes."
    }
    

    产生[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]

    Structured Text Tokenizers

    适用于结构化文本(例如邮箱、身份证等)

    Keyword Tokenizer

    • 原模原样不变。
    • 示例
    POST _analyze
    {
      "tokenizer": "keyword",
      "text": "New York"
    }
    

    产生[ New York ]

    • 配置参数
    参数 说明
    buffer_size 缓冲区大小。默认256。
    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer":{
              "tokenizer": "my_tokenizer"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "keyword",
              "buffer_size": 2
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer": "my_analyzer", 
      "text": "New York"
    }
    

    产生[ New York ]

    Pattern Tokenizer

    • 可以按照正则表达式切分,也可以按照正则表达式提取。

    • 示例

    POST _analyze
    {
      "tokenizer": "pattern",
      "text": "The foo_bar_size's default is 5."
    }
    

    产生[ The, foo_bar_size, s, default, is, 5 ]

    • 配置参数
    参数 说明
    pattern 使用Java正则表达式。默认\W+
    flags Java正则表达式flags,多个用|分离,例如"CASE_INSENSITIVE | COMMENTS"。
    group 将哪个捕获分组作为词元。默认是 -1,相当于split。

    Char Group Tokenizer

    • 根据定义的字符切分。
    • 配置参数
    参数 说明
    tokenize_on_chars 用来切分的字符。可以使用单个例如-,也可以使用字符组:whitespaceletterdigitpunctuationsymbol
    POST _analyze
    {
      "tokenizer": {
        "type": "char_group",
        "tokenize_on_chars": [
          "whitespace",
          "-"
        ]
      },
      "text": "The QUICK brown-fox"
    }
    

    产生[ The, QUICK, brown, fox ]

    Simple Pattern Tokenizer

    • 使用Lucene regular expressions捕获文本,比pattern tokenizer受限(pattern tokenizer既可以捕获又可以切分),但是更快。
    • 配置参数
    参数 说明
    pattern 使用Lucene regular expressions。默认空字符串,不捕获,输出空条件。
    POST _analyze
    {
      "tokenizer": {
        "type": "simple_pattern",
        "pattern": "[0123456789]{2}"
      },
      "text": "fd-786-335-514-x"
    }
    

    产生[ 78, 33, 51 ]

    Simple Pattern Split Tokenizer

    • 使用Lucene regular expressions切分文本,比pattern tokenizer受限(pattern tokenizer既可以捕获又可以切分),但是更快。
    • 配置参数
    参数 说明
    pattern 使用Lucene regular expressions。默认空字符串,不切分,整条输出。
    POST _analyze
    {
      "tokenizer": {
        "type": "simple_pattern_split",
        "pattern": "_"
      },
      "text": "an_underscored_phrase"
    }
    

    产生[ an, underscored, phrase ]

    Path Tokenizer

    • 切分类似文件系统路径的值。
    • 示例
    POST _analyze
    {
      "tokenizer": "path_hierarchy",
      "text": "/one/two/three"
    }
    

    产生[ /one, /one/two, /one/two/three ]

    • 配置参数
    参数 说明
    delimiter 路径分隔符。默认/
    replacement 分割后用来替换的分隔符。默认与delimiter一致。
    buffer_size 缓冲大小。默认1024
    reverse true则从相反顺序切分。默认fasle。例如,one/two/three默认情况下切分为[ one, one/two, one/two/three ],设为true,则结果为[ one/two/three, two/three, three ]
    skip 跳过多少个。默认0
    POST _analyze
    {
      "tokenizer": {
        "type": "path_hierarchy",
        "delimiter": "-",
        "replacement": "/",
        "skip": 2
      },
      "text": "one-two-three-four-five"
    }
    

    产生[ /three, /three/four, /three/four/five ]

    设置reversetrue,产生[ one/two/three/, two/three/, three/ ]

    相关文章

      网友评论

          本文标题:999 - Elasticsearch Analysis 03

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