Elasticsearch自定义字符过滤器失效,求提取JSON键的分析器方案
搞定Elasticsearch提取JSON键的自定义分析器问题
嘿,我看你想做一个能处理JSON字符串、提取键的自定义分析器,现在字符过滤器没生效对吧?问题出在映射语法的细节上,我来给你捋清楚怎么改:
先看修正后的完整配置
{ "settings": { "analysis": { "analyzer": { "query_logging_analyzer": { "tokenizer": "whitespace", "char_filter": [ "json_cleanup_filter" ] } }, "char_filter": { "json_cleanup_filter": { "type": "mapping", "mappings": [ "' => ", "{ => ", "} => ", ", => ", ": => ", "[ => ", "] => " ] } } } } }
为什么原来的配置不行?
- 你用了
=>这种HTML转义后的写法,但Elasticsearch的mapping字符过滤器只认**原生的=>**作为映射分隔符,之前的写法会被当成普通字符,根本不会触发替换。 - 另外
\\u0020完全可以直接写成空格,既直观又不会出错。
修正后的效果
比如你输入:{"user":"john","tags":["admin","editor"]}
经过这个分析器处理后:
- 字符过滤器会把
{、}、:、[、]、,全换成空格,得到:"user" "john" "tags" "admin" "editor" - 再通过
whitespace分词器拆分,就能得到"user"、"john"、"tags"这些token,轻松提取出JSON的键啦。
要是你还想去掉引号,直接在mappings里加一条" => 就行,这样连双引号也会被替换成空格,最终得到纯文本的键和值。
内容的提问来源于stack exchange,提问作者ffff
相关产品推荐
相关产品推荐

