Link Search Menu Expand Document Documentation Menu

Shingle 词元过滤器

Shingle 词元过滤器用于从输入文本生成词元 n-gram,或称作*分词串*。例如,对于字符串 slow green turtleshingle 过滤器会创建以下单词和双词分词串:slowslow greengreengreen turtleturtle

此词元过滤器通常与其他过滤器结合使用,通过索引短语而不是单个词元来提高搜索准确性。有关更多信息,请参阅“短语建议器”。

参数

shingle 词元过滤器可以使用以下参数进行配置。

参数 必需/可选 数据类型 描述
min_shingle_size 可选 整数 要连接的最小词元数。默认值为 2
max_shingle_size 可选 整数 要连接的最大词元数。默认值为 2
output_unigrams 可选 布尔型 是否将单词(单个词元)作为输出。默认值为 true
output_unigrams_if_no_shingles 可选 布尔型 如果未生成分词串,是否输出单词。默认值为 false
token_separator 可选 字符串 用于将词元连接成一个分词串的分隔符。默认值为空格 (" ")。
filler_token 可选 字符串 插入到空位置或词元之间间隙的词元。默认值为下划线 (_)。

如果 output_unigramsoutput_unigrams_if_no_shingles 都设置为 true,则 output_unigrams_if_no_shingles 将被忽略。

示例

以下示例请求创建一个名为 my-shingle-index 的新索引,并配置一个带有 shingle 过滤器的分析器

PUT /my-shingle-index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_shingle_filter": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 2,
          "output_unigrams": true
        }
      },
      "analyzer": {
        "my_shingle_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_shingle_filter"
          ]
        }
      }
    }
  }
}

生成的词元

使用以下请求检查使用该分析器生成的词元

GET /my-shingle-index/_analyze
{
  "analyzer": "my_shingle_analyzer",
  "text": "slow green turtle"
}

响应包含生成的词元

{
  "tokens": [
    {
      "token": "slow",
      "start_offset": 0,
      "end_offset": 4,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "slow green",
      "start_offset": 0,
      "end_offset": 10,
      "type": "shingle",
      "position": 0,
      "positionLength": 2
    },
    {
      "token": "green",
      "start_offset": 5,
      "end_offset": 10,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "green turtle",
      "start_offset": 5,
      "end_offset": 17,
      "type": "shingle",
      "position": 1,
      "positionLength": 2
    },
    {
      "token": "turtle",
      "start_offset": 11,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}
剩余 350 字符

有问题?

想要贡献?