词片词元过滤器

词片词元过滤器 #

词片(shingle)词元过滤器用于从输入文本中生成词 n 元组(即词片)。例如,对于字符串 “slow green turtle”,词片过滤器会创建以下一元词片和二元词片:“slow”、“slow green”、“green”、“green turtle” 以及 “turtle”。

这个词元过滤器常常与其他过滤器结合使用,通过对短语而不是单个词元进行索引来提高搜索的准确性。

参数说明 #

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

参数必需/可选数据类型描述
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”的新索引,并配置了一个带有词片过滤器的分词器。

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
    }
  ]
}