ICU 分词器

编辑

根据 UAX #29:Unicode 文本分段 中定义的词边界将文本分词为单词。它的行为与 standard 分词器 非常相似,但通过使用基于字典的方法识别泰语、老挝语、中文、日语和韩语中的单词,并使用自定义规则将缅甸语和高棉语文本分解为音节,从而为某些亚洲语言提供了更好的支持。

PUT icu_sample
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_icu_analyzer": {
            "tokenizer": "icu_tokenizer"
          }
        }
      }
    }
  }
}

规则自定义

编辑

此功能在 Lucene 中被标记为实验性

您可以通过指定每个脚本的规则文件来自定义 icu-tokenizer 的行为,请参阅 RBBI 规则语法参考 以获取更详细的说明。

要添加 icu 分词器规则,请设置 rule_files 设置,该设置应包含以逗号分隔的 code:rulefile 对列表,格式如下:四字母 ISO 15924 脚本代码,后跟一个冒号,然后是规则文件名。规则文件放置在 ES_HOME/config 目录中。

作为规则文件如何使用的演示,请将以下用户文件保存到 $ES_HOME/config/KeywordTokenizer.rbbi

.+ {200};

然后创建一个分析器来使用此规则文件,如下所示

PUT icu_sample
{
  "settings": {
    "index": {
      "analysis": {
        "tokenizer": {
          "icu_user_file": {
            "type": "icu_tokenizer",
            "rule_files": "Latn:KeywordTokenizer.rbbi"
          }
        },
        "analyzer": {
          "my_analyzer": {
            "type": "custom",
            "tokenizer": "icu_user_file"
          }
        }
      }
    }
  }
}

GET icu_sample/_analyze
{
  "analyzer": "my_analyzer",
  "text": "Elasticsearch. Wow!"
}

上面的 analyze 请求返回以下内容

{
   "tokens": [
      {
         "token": "Elasticsearch. Wow!",
         "start_offset": 0,
         "end_offset": 19,
         "type": "<ALPHANUM>",
         "position": 0
      }
   ]
}