ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Pattern Tokenizer **Pattern Tokenizer **使用正则表达式分割文本。遇到单词分隔符将文本分割为词元, 或者将捕获到匹配的文本作为词元。 默认的匹配模式时   \W+ ,遇到非单词的字符时分割文本。 谨防病态的正则表达式 **Pattern Tokenizer** 使用 [Java 正则表达式](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) 。 一个书写不当的正则表达式会导致运行缓慢,甚至抛出 StackOverflowError 导致运行中的节点突然退出。 查看更多关于 [病态的正则表达式 和 如何避免。](http://www.regular-expressions.info/catastrophic.html) 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-pattern-tokenizer.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-pattern-tokenizer.html) 译文链接 : [http://www.apache.wiki/display/Elasticsearch/Pattern+Tokenizer](http://www.apache.wiki/display/Elasticsearch/Pattern+Tokenizer) 贡献者 : [陈益雷](/display/~chenyilei),[ApacheCN](/display/~apachecn),[Apache中文网](/display/~apachechina) ## **输出示例** ``` POST _analyze { "tokenizer": "pattern", "text": "The foo_bar_size's default is 5." } ``` 上面的句子会生成如下的词元: ``` [ The, foo_bar_size, s, default, is, 5 ] ``` ## **配置** **Pattern Tokenizer **有以下参数: | `pattern` | [Java 正则表达式](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) 。默认是 `\W+ 。` | | `flags` | Java正则表达式 [flags](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#field.summary). flag之间用管道分隔, 如 `"CASE_INSENSITIVE|COMMENTS"。` | | `group` | 将哪个捕获分组作为词元。默认是 -1。 | ## **配置示例** 下面的例子中,我们配置 **Pattern Tokenizer **遇到逗号时分隔文本。 ``` PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "pattern", "pattern": "," } } } } } POST my_index/_analyze { "analyzer": "my_analyzer", "text": "comma,separated,values" } ``` 输出为: ``` [ comma, separated, values ] ``` 在下一个例子中,我们配置 **Pattern Tokenizer **遇到双引号( 忽视转义的引号 \" ) 时捕获分组。正则表达式如下: ``` "((?:\\"|[^"]|\\")*)" ``` 解释: * 起始的引号 " * 开始捕获 * 一个 \"  或者其他 非" 的字符 * 重复直到无法匹配更多的字符 * 结束的引号 在写入到 JSON 中, **"** 和 **\** 需要转义,因此表达式最终为: ``` \"((?:\\\\\"|[^\"]|\\\\\")+)\" ``` ``` PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "pattern", "pattern": "\"((?:\\\\\"|[^\"]|\\\\\")+)\"", "group": 1 } } } } } POST my_index/_analyze { "analyzer": "my_analyzer", "text": "\"value\", \"value with embedded \\\" quote\"" } ``` 输出为: ``` [ value, value with embedded \" quote ] ```