• 自定义分词器-基于ik_analyzer过滤json的key


    由于工作需要,有时候字段中存储的值是诸如 {"name":"车辆vid"} 这样的值,并且我们只需要对json串中的value进行分词,而不需要对key也进行分词搜索

    假设直接使用ik_max_word对json串进行分词,得到的结果如下所示:

     可以看到,json的key也被解析成一個token了,这显然不是我们要的结果。

    下面自定义一个名为my_custom_json_ik_analyzer的分詞器

    PUT susu_test2
    {
      "settings": {
          "analysis": {
            "analyzer": {
              "my_custom_json_ik_analyzer": {
                "char_filter": [
                  "json_key_char_filter"
                ],
                "tokenizer": "ik_max_word"
              }
            },
            "char_filter": {
              "json_key_char_filter": {
                "pattern": "("\w*")(\s*)(:)",
                "type": "pattern_replace",
                "replacement": ""
              }
            }
          }
      }
    }

    如下图:

    该分词器是在ik_max_word的基础上,添加了【自定义的】名为json_key_char_filter的character filter,用于在分词前,先过滤掉字段中的json字符串的key。
    而json_key_char_filter的character filter,则是基于 pattern_replace,用正则表达式的方式来将json字符串中的key给替换为空的方式,将json串中的key给替换掉了。

    接下来测试自定义的分词器:

     可以看到,自定义的分词器,只对json串的value进行分词。

  • 相关阅读:
    java学习--工具类学习之Arrays(1)
    509. 斐波那契数
    572. 另一个树的子树
    cmd中的标准文件重定向
    ng正则使用(持续更新)
    MySQL基准测试
    mysql_connect 弃用之后使用mysqli替换需要注意事项
    数据迁移到rds时候犯下的低级错误
    MySQL 架构与历史
    mysql中涉及到钱的字段如何设计
  • 原文地址:https://www.cnblogs.com/suhaha/p/15211274.html
Copyright © 2020-2023  润新知