最小哈希分词过滤器

最小哈希分词过滤器 #

最小哈希(min_hash)分词过滤器用于基于最小哈希近似算法为词元生成哈希值,这对于检测文档间的相似度很有用。最小哈希分词过滤器会为一组词元(通常来自一个经过分词的字段)生成哈希值。

参数说明 #

最小哈希分词过滤器可以使用以下参数进行配置。

参数必需/可选数据类型描述
hash_count可选整数为每个词元生成的哈希值数量。增加此值通常会提高相似度估计的准确性,但会增加计算成本。默认值为 1。
bucket_count可选整数要使用的哈希桶数量。这会影响哈希的粒度。更多的桶能提供更细的粒度并减少哈希冲突,但需要更多内存。默认值为 512
hash_set_size可选整数每个桶中要保留的哈希数量。这会影响哈希质量。更大的集合大小可能会带来更好的相似度检测效果,但会消耗更多内存。默认值为 1。
with_rotation可选布尔值当设置为 true 时,如果 hash_set_size 为 1,过滤器会用从其右侧按环形顺序找到的第一个非空桶的值填充空桶。如果 bucket_count 参数大于 1,此设置会自动默认为 true;否则,默认为 false

参考样例 #

以下示例请求创建了一个名为 minhash_index 的新索引,并配置了一个带有最小哈希过滤器的分词器:

PUT /minhash_index
{
  "settings": {
    "analysis": {
      "filter": {
        "minhash_filter": {
          "type": "min_hash",
          "hash_count": 3,
          "bucket_count": 512,
          "hash_set_size": 1,
          "with_rotation": false
        }
      },
      "analyzer": {
        "minhash_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "minhash_filter"
          ]
        }
      }
    }
  }
}

产生的词元 #

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

POST /minhash_index/_analyze
{
  "analyzer": "minhash_analyzer",
  "text": "Easysearch is very powerful."
}

返回内容中包含了生成的词元(这些词元没有直观的可读性,因为它们代表的是哈希值):

{
  "tokens" : [
    {
      "token" : "\u0000\u0000㳠锯ੲ걌䐩䉵",
      "start_offset" : 0,
      "end_offset" : 27,
      "type" : "MIN_HASH",
      "position" : 0
    },
    {
      "token" : "\u0000\u0000㳠锯ੲ걌䐩䉵",
      "start_offset" : 0,
      "end_offset" : 27,
      "type" : "MIN_HASH",
      "position" : 0
    },
    ...