分词器参考(Tokenizer reference)

目录

面向单词的分词器

部分单词分词器

结构化文本分词器

字符组分词器(Character group tokenizer)

输出示例

配置

经典分词器(Classic tokenizer)

输出示例

配置

示例配置

Edge n-gram 分词器

输出示例

配置

max_gram 参数的限制

配置示例

关键词分词器(Keyword tokenizer)

示例输出

与标记过滤器结合使用

配置

字母分词器(Letter tokenizer)

输出示例

配置

小写分词器(Lowercase Tokenizer)

输出示例

配置

N-gram分词器

输出示例

配置

示例配置

路径层次标记生成器(Path hierarchy tokenizer)

示例

配置

示例配置

详细示例

模式分词器(Pattern tokenizer)

示例

配置

示例配置

简单模式标记器编辑(Simple pattern tokenizer)

配置

配置示例

简单模式拆分标记器(Simple pattern split tokenizer)

配置

示例配置

标准分词器(Standard tokenizer)

示例

配置参数

示例配置

UAX URL 电子邮件分词器

示例

配置

示例配置

空格分词器(Whitespace tokenizer)

示例

配置


概述

注意病态正则表达式 模式标记器使用Java正则表达式。

糟糕编写的正则表达式可能运行非常缓慢,甚至可能引发StackOverflowError,并导致其运行的节点突然退出。

了解有关病态正则表达式及如何避免它们的更多信息。

分词器接收字符流,将其分解成单独的标记(通常是单个单词),并输出标记流。例如,空格分词器会在看到任何空格时将文本拆分为标记。它会将文本 "Quick brown fox!" 转换为标记 [Quick, brown, fox!]。

分词器还负责记录以下内容:

  • 每个术语的顺序或位置(用于短语和词近查询)
  • 术语表示的原始单词的起始和结束字符偏移(用于突出显示搜索片段)
  • 标记类型,即生成的每个术语的分类,如<ALPHANUM>、<HANGUL>或<NUM>。较简单的分析器只生成单词标记类型。

Elasticsearch具有许多内置分词器,可用于构建自定义分析器。

面向单词的分词器

以下分词器通常用于将完整文本标记为单个单词:

  • 标准分词器:标准分词器根据Unicode文本分割算法将文本划分为单词。它删除大多数标点符号。对于大多数语言来说,这是最佳选择。
  • 字母分词器:字母分词器在遇到非字母字符时将文本划分为术语。
  • 小写分词器:小写分词器与字母分词器类似,但它还将所有术语转换为小写。
  • 空格分词器:空格分词器在遇到任何空格字符时将文本划分为术语。
  • UAX URL Email 分词器:uax_url_email 分词器与标准分词器类似,但它将URL和电子邮件地址识别为单个标记
  • 经典分词器:经典分词器是用于英语的基于语法的分词器。
  • 泰语分词器:泰语分词器将泰语文本分割为单词。

部分单词分词器

这些分词器将文本或单词分解为小片段,用于部分单词匹配:

  • N-Gram 分词器(N-Gram Tokenizer):ngram 分词器可以在遇到指定字符列表之一时将文本分解为单词(例如空格或标点符号),然后返回每个单词的n-gram:连续字母的滑动窗口,例如 quick → [qu, ui, ic, ck]。
  • Edge N-Gram 分词器(Edge N-Gram Tokenizer):edge_ngram 分词器可以在遇到指定字符列表之一时将文本分解为单词(例如空格或标点符号),然后返回每个单词的以单词开头为锚的n-gram,例如 quick → [q, qu, qui, quic, quick]。

结构化文本分词器

以下分词器通常用于结构化文本,如标识符、电子邮件地址、邮政编码和路径,而不是用于完整文本:

  • 关键词分词器(Keyword Tokenizer):关键词分词器是一个“空操作”分词器,接受任何文本,并输出与输入相同的文本作为单个术语。它可以与诸如小写之类的标记过滤器结合使用,以规范化分析后的术语。
  • 模式分词器(Pattern Tokenizer):模式分词器使用正则表达式,要么在每次匹配单词分隔符时将文本拆分为术语,要么捕获匹配的文本作为术语。
  • 简单模式分词器(Simple Pattern Tokenizer):simple_pattern 分词器使用正则表达式捕获匹配的文本作为术语。它使用正则表达式功能的受限子集,并且通常比pattern分词器更快。
  • 字符组分词器(Char Group Tokenizer):char_group 分词器通过设置要拆分的字符集来配置,通常比运行正则表达式更经济。
  • 简单模式拆分分词器(Simple Pattern Split Tokenizer):simple_pattern_split 分词器使用与simple_pattern分词器相同的受限正则表达式子集,但在匹配处拆分输入,而不是将匹配返回为术语。
  • 路径分词器(Path Tokenizer):path_hierarchy 分词器接受分层值,如文件系统路径,在路径分隔符处拆分,并为树中的每个组件发出一个术语,例如 /foo/bar/baz → [/foo, /foo/bar, /foo/bar/baz]。

字符组分词器(Character group tokenizer

字符组分词器在遇到属于定义集合的字符时将文本拆分为术语。它主要用于希望进行简单自定义分词,并且不接受使用模式分词器的开销的情况。

输出示例

POST _analyze
{
  "tokenizer": {
    "type": "char_group",
    "tokenize_on_chars": [
      "whitespace",
      "-",
      "\\n"
    ]
  },
  "text": "The QUICK brown-fox"
}

输出结果

{
  "tokens": [
    {
      "token": "The",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 0
    },
    {
      "token": "QUICK",
      "start_offset": 4,
      "end_offset": 9,
      "type": "word",
      "position": 1
    },
    {
      "token": "brown",
      "start_offset": 10,
      "end_offset": 15,
      "type": "word",
      "position": 2
    },
    {
      "token": "fox",
      "start_offset": 16,
      "end_offset": 19,
      "type": "word",
      "position": 3
    }
  ]
}

配置

字符组分词器接受以下参数:

tokenize_on_chars包含要在字符串上进行标记化的字符列表的列表。每当遇到此列表中的字符之一时,就会启动一个新标记。它可以接受单个字符,如-,或字符组:whitespace、letter、digit、punctuation、symbol。
max_token_length最大标记长度。如果看到的标记超过此长度,则在max_token_length间隔处拆分。默认为255。

经典分词器(Classic tokenizer)

经典分词器是一种基于语法的分词器,适用于英语文档。该分词器对首字母缩写、公司名称、电子邮件地址和互联网主机名的特殊处理具有启发式规则。然而,这些规则并不总是适用,而且该分词器对英语以外的大多数语言效果不佳:

  • 它在大多数标点符号字符处拆分单词删除标点符号。但是,不跟随空格的句点被视为标记的一部分。
  • 它在连字符处拆分单词,除非标记中有数字,此时整个标记被解释为产品编号并且不会被拆分。
  • 它将电子邮件地址和互联网主机名识别为一个标记

输出示例

POST _analyze
{
  "tokenizer": "classic",
  "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为5(仅用于演示目的):

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "classic",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my-index-000001/_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 ]

Edge n-gram 分词器

Edge n-gram 分词器首先在遇到指定字符列表之一时将文本拆分为单词,然后发出每个单词的N-gram,其中N-gram的开头锚定在单词的开头。

Edge N-Grams 对于搜索即时查询非常有用。当您需要对具有广泛已知顺序的文本进行搜索即时查询,例如电影或歌曲标题时,完成建议器是比边缘N-grams更有效的选择。Edge N-grams在尝试自动完成可以以任何顺序出现的单词时具有优势。

输出示例

在默认设置下,edge_ngram 分词器将初始文本视为单个标记,并生成最小长度为1、最大长度为2的N-gram:

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

上述句子将生成以下术语:

[ Q, Qu ]

这些默认的gram长度几乎是无用的。在使用之前,您需要配置 edge_ngram。

配置

edge_ngram 分词器接受以下参数:

  • min_gram

    N-gram 中的最小字符长度。默认为1。

  • max_gram

    N-gram 中的最大字符长度。默认为2。请参阅 max_gram 参数的限制

  • token_chars

    应包含在标记中的字符类。Elasticsearch 将拆分不属于指定类别的字符。默认为[](保留所有字符)。字符类可以是以下任何一种:

    • letter — 例如 a、b、ï 或 京
    • digit — 例如 3 或 7
    • whitespace — 例如 " " 或 "\n"
    • punctuation — 例如 ! 或 "
    • symbol — 例如 $ 或 √
    • custom — 需要使用 custom_token_chars 设置的自定义字符。
  • custom_token_chars

    应视为标记的一部分的自定义字符。例如,将其设置为+_- 将使分词器将加号、减号和下划线视为标记的一部分。

max_gram 参数的限制

edge_ngram 分词器的 max_gram 值限制了标记的字符长度。当 edge_ngram 分词器与索引分析器一起使用时,这意味着长度超过 max_gram 的搜索词可能不会匹配任何索引的词

例如,如果 max_gram 为 3,则对 apple 的搜索不会匹配索引的术语 app

为了解决这个问题,您可以使用截断标记过滤器搜索分析器将搜索词截断到 max_gram 字符长度。然而,这可能会返回不相关的结果。

例如,如果 max_gram 为 3,搜索词被截断为三个字符,搜索词 apple 被缩短为 app。这意味着搜索 apple 会返回与 app 匹配的任何索引词,如 apply、approximate 和 apple。

我们建议测试两种方法,看看哪一种最适合您的用例和所需的搜索体验。

配置示例

在这个例子中,我们配置 edge_ngram 分词器,将字母和数字视为标记,并生成最小长度为2、最大长度为10的 N-gram:

PUT my-index-000001
{
  "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-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}

分词结果如下

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

通常,我们建议在索引时和搜索时使用相同的分析器。但是,在 edge_ngram 分词器的情况下,建议略有不同。只有在索引时使用 edge_ngram 分词器才有意义,以确保在索引中匹配部分单词。在搜索时间,只需搜索用户键入的术语,例如:Quick Fo。

以下是如何为搜索即时设置字段的示例。

请注意,索引分析器的 max_gram 值为 10,将索引的术语限制为 10 个字符。搜索词不会被截断,这意味着长于 10 个字符的搜索词可能不会匹配任何索引的术语。

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete",
        "search_analyzer": "autocomplete_search"
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
  "title": "Quick Foxes" 
}

POST my-index-000001/_refresh

GET my-index-000001/_search
{
  "query": {
    "match": {
      "title": {
        "query": "Quick Fo", 
        "operator": "and"
      }
    }
  }
}

自动完成分析器索引了术语 [qu, qui, quic, quick, fo, fox, foxe, foxes]。

自动完成搜索分析器搜索了术语 [quick, fo],这两个术语都出现在索引中。

关键词分词器(Keyword tokenizer)

关键词分词器是一个“空操作”分词器,接受任何文本,并将确切相同的文本输出为单个术语。它可以与标记过滤器结合使用以规范输出,例如将电子邮件地址转为小写。

示例输出

POST _analyze
{
  "tokenizer": "keyword",
  "text": "New York"
}

分词结果如下

[ New York ]

与标记过滤器结合使用

您可以将关键词分词器与标记过滤器结合使用,以规范化结构化数据,例如产品 ID 或电子邮件地址。

例如,以下 analyze API 请求使用关键词分词器和小写过滤器将电子邮件地址转换为小写。

POST _analyze
{
  "tokenizer": "keyword",
  "filter": [ "lowercase" ],
  "text": "john.SMITH@example.COM"
}

分词结果如下

[ john.smith@example.com ]

配置

关键词分词器接受以下参数:

  • buffer_size

    在单个传递中读取到术语缓冲区的字符数。默认为 256。术语缓冲区将按照这个大小增长,直到所有文本都被消耗。建议不要更改此设置

字母分词器(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)

小写分词器(Lowercase Tokenizer)类似于字母分词器,它在遇到非字母字符时将文本拆分为术语,但它还将所有术语转换为小写。从功能上讲,它相当于字母分词器与小写标记过滤器的组合,但它更高效,因为它在单个步骤中执行这两个操作。

输出示例

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 ]

配置

不可配置

N-gram分词器

N-gram 分词器首先在遇到指定字符列表中的任何一个字符时将文本拆分为单词,然后为每个指定长度的单词生成 N-gram。

N-gram 就像一个滑动窗口,沿着单词移动 - 一个指定长度的连续字符序列。它们对于查询不使用空格或具有长复合词的语言(例如德语)非常有用。

输出示例

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

上述句子将生成以下术语:

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

配置

N-gram 分词器接受以下参数:

min_gramGram 中的最小字符数。默认为 1。
max_gramGram 中的最大字符数。默认为 2。
token_chars应包含在一个 Gram 中的字符类别。Elasticsearch 将根据指定的类别拆分不属于这些类别的字符。默认为 [](保留所有字符)。
字符类别可以是以下之一:
letter — 例如 a、b、ï 或 京
digit — 例如 3 或 7
whitespace — 例如 " " 或 "\n"
punctuation — 例如 ! 或 "
symbol — 例如 $ 或 √
custom — 需要使用 custom_token_chars 设置的自定义字符。
custom_token_chars应将其视为 Gram 的一部分的自定义字符。例如,将其设置为 +-_ 将使分词器将加号、减号和下划线视为 Gram 的一部分。

通常将 min_grammax_gram 设置为相同的值是有意义的。长度越小,匹配的文档越多,但匹配的质量越低。长度越长,匹配越具体。三元分词(长度为 3)是一个不错的起点。

索引级别的设置 index.max_ngram_diff 控制 max_grammin_gram 之间的最大允许差异。

示例配置

在此示例中,我们配置了 ngram 分词器,将字母和数字视为标记,并生成三元分词:

PUT my-index-000001
{
  "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-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}

上述示例生成以下术语:

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

路径层次标记生成器(Path hierarchy tokenizer

路径层次标记生成器(path_hierarchy tokenizer)接受类似文件系统路径的层次值,根据路径分隔符进行拆分,并为树中的每个组件发出一个术语。路径层次生成器底层使用 Lucene 的 PathHierarchyTokenizer。

示例

POST _analyze
{
  "tokenizer": "path_hierarchy",
  "text": "/one/two/three"
}

上述文本将生成以下术语:

[ "/one", "/one/two", "/one/two/three" ]

配置

路径层次标记生成器接受以下参数:

delimiter用作路径分隔符的字符。默认为 /。
replacement用作分隔符的可选替换字符。默认为分隔符。
buffer_size在单个传递中读取到术语缓冲区的字符数。默认为 1024。术语缓冲区将以这个大小增长,直到所有文本都已消耗。建议不要更改此设置。
reverse如果为 true,则使用 Lucene 的 http://lucene.apache.org/core/9_8_0/analysis/common/org/apache/lucene/analysis/path/ReversePathHierarchyTokenizer.html,适用于域样式的层次结构。默认为 false。
skip要跳过的初始标记数。默认为 0。

示例配置

在此示例中,我们配置路径层次标记生成器以在 - 字符上拆分,并用 / 替换它们。前两个标记将被跳过:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "path_hierarchy",
          "delimiter": "-",
          "replacement": "/",
          "skip": 2
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "one-two-three-four-five"
}

上述示例将生成以下术语:

[ "/three", "/three/four", "/three/four/five" ]

如果将 reverse 设置为 true,则将生成以下结果:

[ "one/two/three/", "two/three/", "three/" ]

详细示例

参考原文

模式分词器(Pattern tokenizer)

模式标记器使用正则表达式,可以在匹配单词分隔符时将文本拆分为项,或者在匹配文本时捕获匹配的文本作为项。

默认模式为\W+,它在遇到非单词字符时拆分文本。

注意病态正则表达式:模式标记器使用Java正则表达式。糟糕编写的正则表达式可能运行非常缓慢,甚至可能引发StackOverflowError,并导致其运行的节点突然退出。了解有关病态正则表达式及如何避免它们的更多信息

示例

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

上述文本将生成以下术语:

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

配置

pattern一个Java正则表达式,默认为\W+。
flagsJava正则表达式标志。标志应以竖线分隔,例如"CASE_INSENSITIVE
group要提取为标记的捕获组。默认为-1(拆分)。

示例配置

在这个例子中,我们配置了模式标记器,使其在遇到逗号时将文本拆分为标记:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "comma,separated,values"
}

上述例子生成以下项:

[ comma, separated, values ]

在下一个例子中,我们配置了模式标记器,以捕获双引号内的值(忽略嵌入的转义引号 \")。正则表达式本身如下所示:"((?:\\\\"|[^"]|\\\\")*)"

当模式在JSON中指定时,需要对 " 和 \ 字符进行转义,因此模式最终看起来像:\\"((?:\\\\\\\\\\"|[^\\"]|\\\\\\\\\\")+)\\"

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": "\\"((?:\\\\\\\\\\"|[^\\"]|\\\\\\\\\\")+)\\"",
          "group": 1
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "\\"value\\", \\"value with embedded \\\\\\" quote\\""
}

上述例子生成以下项:

[ value, value with embedded \\" quote ]

简单模式标记器编辑(Simple pattern tokenizer

简单模式标记器使用正则表达式捕获匹配的文本作为项。它支持的正则表达式特性比模式标记器更有限,但标记化通常更快。

与模式标记器不同,该标记器不支持在模式匹配上拆分输入。要使用相同受限正则表达式子集进行模式匹配拆分,请参阅简单模式拆分标记器。

该标记器使用Lucene正则表达式。有关受支持的功能和语法的解释,请参阅正则表达式语法

默认模式是空字符串,不生成任何项。此标记器应始终使用非默认模式进行配置。

配置

配置示例

此示例配置简单模式标记器以生成由三位数字组成的项。

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "simple_pattern",
          "pattern": "[0123456789]{3}"
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "fd-786-335-514-x"
}

上述例子生成以下项:

[ 786, 335, 514 ]

简单模式拆分标记器(Simple pattern split tokenizer)

简单模式拆分标记器使用正则表达式在模式匹配处将输入拆分为项。它支持的正则表达式特性比模式标记器更有限,但标记化通常更快。

该标记器不会从匹配本身生成项。要使用相同受限正则表达式子集中的模式从匹配中生成项,请参阅简单模式标记器。

该标记器使用Lucene正则表达式。有关受支持的功能和语法的解释,请参阅正则表达式语法。

默认模式是空字符串,生成一个包含完整输入的项。此标记器应始终使用非默认模式进行配置。

配置

示例配置

此示例配置简单模式拆分标记器,以在下划线处拆分输入文本。

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "simple_pattern_split",
          "pattern": "_"
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "an_underscored_phrase"
}

上述例子生成以下项:

[ an, underscored, phrase ]

标准分词器(Standard tokenizer)

标准分词器提供基于语法的标记化(基于Unicode文本分割算法,如Unicode标准附录#29中指定),适用于大多数语言。

示例

POST _analyze
{
  "tokenizer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述例子生成以下terms:

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

配置参数

示例配置

在这个例子中,我们配置标准分词器,将其 max_token_length 设置为 5(仅用于演示目的):

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "standard",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述示例生成以下terms:

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

UAX URL 电子邮件分词器

UAX URL 电子邮件分词器与标准分词器类似,但它将URL和电子邮件地址识别为单个标记。

示例

POST _analyze
{
  "tokenizer": "uax_url_email",
  "text": "Email me at john.smith@global-international.com"
}

上述示例生成以下terms:

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

但标准分词器下结果为:

[ Email, me, at, john.smith, global, international.com ]

配置

示例配置

在这个例子中,我们配置了uax_url_email分词器,将其max_token_length设置为5(仅用于演示目的):

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "uax_url_email",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "john.smith@global-international.com"
}

上述示例生成以下terms:

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

空格分词器(Whitespace tokenizer)

空格分词器在遇到空白字符时将文本拆分为项。

示例

POST _analyze
{
  "tokenizer": "whitespace",
  "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. ]

配置

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值