模式替换词元过滤器
编辑模式替换词元过滤器编辑
使用正则表达式匹配和替换词元子字符串。
pattern_replace
过滤器使用 Java 的正则表达式语法。默认情况下,过滤器用空子字符串 (""
) 替换匹配的子字符串。替换子字符串可以使用 Java 的 $g
语法 来引用原始词元文本中的捕获组。
编写不良的正则表达式可能会运行缓慢或返回 StackOverflowError,导致运行该表达式的节点突然退出。
阅读有关 病态正则表达式以及如何避免它们 的更多信息。
此过滤器使用 Lucene 的 PatternReplaceFilter。
示例编辑
以下 分析 API 请求使用 pattern_replace
过滤器将 watch
添加到 foxes jump lazy dogs
中的子字符串 dog
之前。
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ { type: 'pattern_replace', pattern: '(dog)', replacement: 'watch$1' } ], text: 'foxes jump lazy dogs' } ) puts response
GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "pattern_replace", "pattern": "(dog)", "replacement": "watch$1" } ], "text": "foxes jump lazy dogs" }
过滤器生成以下词元。
[ foxes, jump, lazy, watchdogs ]
可配置参数编辑
-
all
- (可选,布尔值)如果为
true
,则替换与pattern
参数的正则表达式匹配的所有子字符串。如果为false
,则过滤器仅替换每个词元中的第一个匹配子字符串。默认为true
。 -
pattern
- (必填,字符串)正则表达式,使用 Java 的正则表达式语法 编写。过滤器使用
replacement
参数中的子字符串替换与此模式匹配的词元子字符串。 -
replacement
- (可选,字符串)替换子字符串。默认为空子字符串 (
""
)。
自定义并添加到分析器编辑
要自定义 pattern_replace
过滤器,请复制它以创建新的自定义词元过滤器的基础。您可以使用其可配置参数修改过滤器。
以下 创建索引 API 请求使用自定义 pattern_replace
过滤器 my_pattern_replace_filter
配置新的 自定义分析器。
my_pattern_replace_filter
过滤器使用正则表达式 [£|€]
匹配并删除货币符号 £
和 €
。过滤器的 all
参数为 false
,这意味着仅删除每个词元中的第一个匹配符号。
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { my_analyzer: { tokenizer: 'keyword', filter: [ 'my_pattern_replace_filter' ] } }, filter: { my_pattern_replace_filter: { type: 'pattern_replace', pattern: '[£|€]', replacement: '', all: false } } } } } ) puts response
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "keyword", "filter": [ "my_pattern_replace_filter" ] } }, "filter": { "my_pattern_replace_filter": { "type": "pattern_replace", "pattern": "[£|€]", "replacement": "", "all": false } } } } }