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