弹性搜索的自定义字符过滤器不起作用

时间:2018-03-21 20:59:18

标签: elasticsearch

我有自定义分析器,如下所示

{
  "settings": {
  "analysis": {
        "analyzer": {
        "query_logging_analyzer": {
          "tokenizer": "whitespace",
          "char_filter": [
          {
            "type": "mapping",
            "mappings": [
              "'=>\\u0020",
              "{=>\\u0020",
              "}=>\\u0020",
              ",=>\\u0020",
              ":=>\\u0020",
              "[=>\\u0020",
              "]=>\\u0020"
            ]
         }
       ]
     }
   }
  }
 }
}

基本上我想要一个接收json字符串并发出json密钥的分析器。为此,我需要通过删除json实体来整理json,例如[ ] { } , : "

这种方式不起作用。 char_filter根本没有生效

我有一个类似的使用pattern_replace的char_filter,它也不起作用

 "char_filter": [
        {
          "type": "pattern_replace",
          "pattern": "\"|\\,|\\:|\\'|\\{|\\}",
          "replacement": ""
        }
      ]

1 个答案:

答案 0 :(得分:0)

“不起作用”到底是什么? 因为您的自定义分析器似乎可以正常工作?

GET _analyze?filter_path=tokens.token
{
  "tokenizer": "whitespace",
  "text": [
    """{ "names": [ "Foo", "Bar" ] }"""
  ],
  "char_filter": [
    {
      "type": "mapping",
      "mappings": [
        "'=>\\u0020",
        "{=>\\u0020",
        "}=>\\u0020",
        ",=>\\u0020",
        ":=>\\u0020",
        "[=>\\u0020",
        "]=>\\u0020"
      ]
    }
  ]
}

返回:

{
  "tokens": [
    {
      "token": """"names""""
    },
    {
      "token": """"Foo""""
    },
    {
      "token": """"Bar""""
    }
  ]
}