我想问一下是否存在一些描述如何使用 Elasticseach模式正则表达式的文档。
我需要编写模式捕获令牌过滤器,它只过滤以特定字开头。例如,输入令牌流应该是(" abcefgh"," abc123"," aabbcc"," abc",&# 34; abdef" )我的标记器只返回 abcefgh , abc123 , abc ,因为这些标记以&开头#34;的 ABC "
有人可以帮助我如何实现这个用例吗?
感谢。
答案 0 :(得分:1)
我建议这样的事情:
"analysis": {
"analyzer": {
"my_trim_keyword_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase",
"trim",
"generate_tokens",
"eliminate_tokens",
"remove_empty"
]
}
},
"filter": {
"eliminate_tokens": {
"pattern": "^(?!abc)\\w+$",
"type": "pattern_replace",
"replacement": ""
},
"generate_tokens": {
"type": "pattern_capture",
"preserve_original": 1,
"patterns": [
"(([a-z]+)(\\d*))"
]
},
"remove_empty": {
"type": "stop",
"stopwords": [""]
}
}
}
如果您的令牌是pattern_capture
过滤器的结果,则您需要在此过滤器后添加我的示例中名为eliminate_tokens
的过滤器,它基本上与不匹配的令牌相匹配从abc
开始。那些不匹配的用空字符串("replacement": ""
)替换。
在此之后,为了删除空标记,我添加了remove_empty
过滤器,该过滤器基本上是stop
过滤器,其中停用词为""
(空字符串)。