指纹分词器 #
指纹(fingerprint)分词器会创建一个文本指纹。该分词器对从输入生成的词项(词元)进行排序和去重,然后使用一个分隔符将它们连接起来。它通常用于数据去重,对于包含相同单词的相似输入,无论单词顺序如何,它都可以产生相同的输出结果。
指纹分词器由以下组件组成:
- 标准分词生成器
 - 词元小写化过滤器
 - ASCII 词元过滤器
 - 停用词词元过滤器
 - 指纹词元过滤器
 
参数说明 #
指纹分词器可以使用以下参数进行配置。
| 参数 | 必填/可选 | 数据类型 | 描述 | 
|---|---|---|---|
separator | 可选 | 字符串 | 在对词项进行词元生成、排序和去重后,用于连接这些词项的字符。默认值为一个空格( )。 | 
max_output_size | 可选 | 整数 | 定义输出词元的最大大小。如果连接后的指纹超过此大小,将被截断。默认值为 255。 | 
stopwords | 可选 | 字符串或字符串列表 | 自定义的停用词列表。默认值为 _none_。 | 
stopwords_path | 可选 | 字符串 | 包含停用词列表的文件的路径(相对于配置目录的绝对路径或相对路径)。 | 
参考样例 #
以下命令创建一个名为 my_custom_fingerprint_index 带有指纹分词器的索引:
PUT /my_custom_fingerprint_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_fingerprint_analyzer": {
          "type": "fingerprint",
          "separator": "-",
          "max_output_size": 50,
          "stopwords": ["to", "the", "over", "and"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "my_field": {
        "type": "text",
        "analyzer": "my_custom_fingerprint_analyzer"
      }
    }
  }
}
产生的词元 #
以下请求用来检查使用该分词器生成的词元:
POST /my_custom_fingerprint_index/_analyze
{
  "analyzer": "my_custom_fingerprint_analyzer",
  "text": "The slow turtle swims over to the dog"
}
返回内容中包含了生成的词元:
{
  "tokens": [
    {
      "token": "dog-slow-swims-turtle",
      "start_offset": 0,
      "end_offset": 37,
      "type": "fingerprint",
      "position": 0
    }
  ]
}
深度定制 #
如果需要深度定制,你可以定义一个包含指纹分词器组件的分词器:
PUT /custom_fingerprint_analyzer
{
  "settings": {
    "analysis": {
      "analyzer": {
        "custom_fingerprint": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "asciifolding",
            "fingerprint"
          ]
        }
      }
    }
  }
}