更新时间:2024-10-21 GMT+08:00
分享

配置OpenSearch集群简繁体转换搜索

本文介绍如何在Elasticsearch集群实现搜索数据的简繁体转换。

场景介绍

简繁体转换插件是一款可以使中文简体和中文繁体相互转换的插件。通过该插件的转换,用户可以使用中文繁体关键字搜索出包含对应中文简体的索引数据,也可以使用中文简体关键字搜索出包含对应中文繁体的索引数据。

云搜索服务默认安装了简繁体转换插件,用户无需自行安装。

简繁体转换插件通常可以当做analyzer、tokenizer、token-filter或char-filter来使用。

简繁体转换插件的转换类型包含如下两种:

  • s2t:将中文简体转换为中文繁体。
  • t2s:将中文繁体转换为中文简体。

配置简繁体转换搜索

  1. 登录云搜索服务管理控制台。
  2. 在左侧导航栏中,选择“集群管理”,进入集群列表页面。
  3. 在集群列表中,单击需要使用的集群对应“操作”列的“Kibana”

    如果开启了安全模式,需要输入创建集群时设置的管理员账户名和密码。

  4. 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。
  5. 在Console界面,执行如下命令,创建索引“stconvert”,并指定自定义映射来定义数据类型。
    Elasticsearch低于7.x版本的代码示例
    PUT /stconvert
    {
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "analysis": {
                "analyzer": {
                    "ts_ik": {
                        "tokenizer": "ik_smart",
                        "char_filter": [
                            "tsconvert",
                            "stconvert"
                        ]
                    }
                },
                "char_filter": {
                    "tsconvert": {
                        "type": "stconvert",
                        "convert_type": "t2s"
                    },
                    "stconvert": {
                        "type": "stconvert",
                        "convert_type": "s2t"
                    }
                }
            }
        },
        "mappings": {
            "type": {
                "properties": {
                    "desc": {
                        "type": "text",
                        "analyzer": "ts_ik"
                    }
                }
            }
        }
    }

    Elasticsearch大于或等于7.x版本和OpenSearch集群的代码示例

    PUT /stconvert
    {
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "analysis": {
                "analyzer": {
                    "ts_ik": {
                        "tokenizer": "ik_smart",
                        "char_filter": [
                            "tsconvert",
                            "stconvert"
                        ]
                    }
                },
                "char_filter": {
                    "tsconvert": {
                        "type": "stconvert",
                        "convert_type": "t2s"
                    },
                    "stconvert": {
                        "type": "stconvert",
                        "convert_type": "s2t"
                    }
                }
            }
        },
        "mappings": {
                     "properties": {
                    "desc": {
                        "type": "text",
                        "analyzer": "ts_ik"
                    }
                }
              }
    }

    返回结果如下所示。

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "stconvert"
    }
  6. 在Console界面,执行如下命令,导入数据到“stconvert”索引中。
    Elasticsearch低于7.x版本的代码示例
    POST /stconvert/type/1
    {
        "desc": "國際電視臺"
    }

    Elasticsearch大于或等于7.x版本和OpenSearch集群的代码示例

    POST /stconvert/_doc/1
    {
        "desc": "國際電視臺"
    }

    当返回结果信息中“failed”字段的值为“0”时,表示数据导入成功。

  7. 在Console界面,执行如下命令,搜索关键字“国际”,并查看搜索结果。
    GET /stconvert/_search
    {
        "query": {
            "match": {
                "desc": "国际"
            }
        }
    }

    搜索结果如下所示。

    {
      "took" : 15,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : 0.5753642,
        "hits" : [
          {
            "_index" : "stconvert",
            "_type" : "type",
            "_id" : "1",
            "_score" : 0.5753642,
            "_source" : {
              "desc" : "國際電視臺"
            }
          }
        ]
      }
    }

相关文档