目 录CONTENT

文章目录

【ElasticSearch】分词器参考(Tokenizer reference)

EulerBlind
2025-07-01 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

概述

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

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

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

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

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

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

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": "[email protected]"
}

点击并拖拽以移动

分词结果如下

[ [email protected] ]

点击并拖拽以移动

配置

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

  • 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_gram Gram 中的最小字符数。默认为 1。
max_gram Gram 中的最大字符数。默认为 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+。
flags Java正则表达式标志。标志应以竖线分隔,例如"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 [email protected]"
}

点击并拖拽以移动

上述示例生成以下terms:

[ Email, me, at, [email protected] ]

点击并拖拽以移动

但标准分词器下结果为:

[ 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": "[email protected]"
}

点击并拖拽以移动

上述示例生成以下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

评论区