CJK 二元组分词器

编辑

将 CJK(中文、日文和韩文)标记组合成二元组

此分词器包含在 Elasticsearch 的内置CJK 语言分析器中。它使用 Lucene 的CJKBigramFilter

示例

编辑

下面的分析 API请求演示了 CJK 二元组分词器的使用方法。

resp = client.indices.analyze(
    tokenizer="standard",
    filter=[
        "cjk_bigram"
    ],
    text="東京都は、日本の首都であり",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'standard',
    filter: [
      'cjk_bigram'
    ],
    text: '東京都は、日本の首都であり'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "standard",
  filter: ["cjk_bigram"],
  text: "東京都は、日本の首都であり",
});
console.log(response);
GET /_analyze
{
  "tokenizer" : "standard",
  "filter" : ["cjk_bigram"],
  "text" : "東京都は、日本の首都であり"
}

此分词器生成以下标记

[ 東京, 京都, 都は, 日本, 本の, の首, 首都, 都で, であ, あり ]

添加到分析器

编辑

下面的创建索引 API请求使用 CJK 二元组分词器来配置新的自定义分析器

resp = client.indices.create(
    index="cjk_bigram_example",
    settings={
        "analysis": {
            "analyzer": {
                "standard_cjk_bigram": {
                    "tokenizer": "standard",
                    "filter": [
                        "cjk_bigram"
                    ]
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'cjk_bigram_example',
  body: {
    settings: {
      analysis: {
        analyzer: {
          standard_cjk_bigram: {
            tokenizer: 'standard',
            filter: [
              'cjk_bigram'
            ]
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "cjk_bigram_example",
  settings: {
    analysis: {
      analyzer: {
        standard_cjk_bigram: {
          tokenizer: "standard",
          filter: ["cjk_bigram"],
        },
      },
    },
  },
});
console.log(response);
PUT /cjk_bigram_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_cjk_bigram": {
          "tokenizer": "standard",
          "filter": [ "cjk_bigram" ]
        }
      }
    }
  }
}

可配置参数

编辑
ignored_scripts

(可选,字符脚本数组) 要禁用二元组的字符脚本数组。可能的取值:

  • han
  • hangul
  • hiragana
  • katakana

所有非 CJK 输入均保持不变。

output_unigrams
(可选,布尔值) 如果 true,则同时输出二元组和一元组形式的标记。如果 false,则当 CJK 字符没有相邻字符时,以一元组形式输出。默认为 false

自定义

编辑

要自定义 CJK 二元组分词器,请复制它以创建新的自定义分词器的基础。您可以使用其可配置参数修改此分词器。

resp = client.indices.create(
    index="cjk_bigram_example",
    settings={
        "analysis": {
            "analyzer": {
                "han_bigrams": {
                    "tokenizer": "standard",
                    "filter": [
                        "han_bigrams_filter"
                    ]
                }
            },
            "filter": {
                "han_bigrams_filter": {
                    "type": "cjk_bigram",
                    "ignored_scripts": [
                        "hangul",
                        "hiragana",
                        "katakana"
                    ],
                    "output_unigrams": True
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'cjk_bigram_example',
  body: {
    settings: {
      analysis: {
        analyzer: {
          han_bigrams: {
            tokenizer: 'standard',
            filter: [
              'han_bigrams_filter'
            ]
          }
        },
        filter: {
          han_bigrams_filter: {
            type: 'cjk_bigram',
            ignored_scripts: [
              'hangul',
              'hiragana',
              'katakana'
            ],
            output_unigrams: true
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "cjk_bigram_example",
  settings: {
    analysis: {
      analyzer: {
        han_bigrams: {
          tokenizer: "standard",
          filter: ["han_bigrams_filter"],
        },
      },
      filter: {
        han_bigrams_filter: {
          type: "cjk_bigram",
          ignored_scripts: ["hangul", "hiragana", "katakana"],
          output_unigrams: true,
        },
      },
    },
  },
});
console.log(response);
PUT /cjk_bigram_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "han_bigrams": {
          "tokenizer": "standard",
          "filter": [ "han_bigrams_filter" ]
        }
      },
      "filter": {
        "han_bigrams_filter": {
          "type": "cjk_bigram",
          "ignored_scripts": [
            "hangul",
            "hiragana",
            "katakana"
          ],
          "output_unigrams": true
        }
      }
    }
  }
}