模式分词器
编辑模式分词器编辑
pattern
分词器使用正则表达式在匹配单词分隔符时将文本拆分为词条,或者将匹配的文本捕获为词条。
默认模式为 \W+
,它在遇到非单词字符时拆分文本。
警惕病态正则表达式
模式分词器使用 Java 正则表达式。
编写不良的正则表达式可能会运行非常缓慢,甚至抛出 StackOverflowError 并导致运行它的节点突然退出。
阅读有关 病态正则表达式以及如何避免它们 的更多信息。
示例输出编辑
response = client.indices.analyze( body: { tokenizer: 'pattern', text: "The foo_bar_size's default is 5." } ) puts response
POST _analyze { "tokenizer": "pattern", "text": "The foo_bar_size's default is 5." }
上面的句子将生成以下词条
[ The, foo_bar_size, s, default, is, 5 ]
配置编辑
pattern
分词器接受以下参数
|
Java 正则表达式,默认为 |
|
Java 正则表达式 标志。标志应以管道符分隔,例如 |
|
要提取为词条的捕获组。默认为 |
示例配置编辑
在此示例中,我们将 pattern
分词器配置为在遇到逗号时将文本拆分为词条
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { my_analyzer: { tokenizer: 'my_tokenizer' } }, tokenizer: { my_tokenizer: { type: 'pattern', pattern: ',' } } } } } ) puts response response = client.indices.analyze( index: 'my-index-000001', body: { analyzer: 'my_analyzer', text: 'comma,separated,values' } ) puts response
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 ]
在下一个示例中,我们将 pattern
分词器配置为捕获用双引号括起来的值(忽略嵌入的转义引号 \"
)。正则表达式本身如下所示
"((?:\\"|[^"]|\\")*)"
其解释如下
- 文字
"
-
开始捕获
- 文字
\"
或除"
之外的任何字符 - 重复直到没有更多字符匹配
- 文字
- 文字闭合
"
在 JSON 中指定模式时,需要对 "
和 \
字符进行转义,因此模式最终如下所示
\"((?:\\\\\"|[^\"]|\\\\\")+)\"
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { my_analyzer: { tokenizer: 'my_tokenizer' } }, tokenizer: { my_tokenizer: { type: 'pattern', pattern: '"((?:\\\"|[^"]|\\\")+)"', group: 1 } } } } } ) puts response response = client.indices.analyze( index: 'my-index-000001', body: { analyzer: 'my_analyzer', text: '"value", "value with embedded \" quote"' } ) puts response
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 ]