首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通配符的Elasticsearch minhash前缀查询?

使用通配符的Elasticsearch minhash前缀查询?
EN

Stack Overflow用户
提问于 2019-03-28 19:35:55
回答 1查看 254关注 0票数 0

我为一些文本生成了minhash字段(基于minhash算法),现在我的问题是,是否可以使用通配符来补充或添加前缀查询?因为问题是,散列字符串值是基于shingles/tokens的内容(文本)位置的。因此,前几个字符(前缀)可能并不总是与相似的内容完全匹配。是否可以在查询的前缀前添加通配符,例如*3AF8659GJ?

编辑:我想我对这个问题的思考还不够认真。散列差异可以在散列字符串中的任何地方(基于文本差异的内容位置中的文本差异)。所以我想“最好”的唯一方法是编辑距离和一些阈值。

例如,将所有散列放入一个数组中,并按词法顺序对它们进行排序(或者如何对十六进制字符串进行排序?)然后只比较接下来的k个文档,直到达到编辑距离阈值,并将副本放在一个单独的数组中。

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 20:19:33

出于性能方面的原因,非常不鼓励使用后缀进行搜索,如official document中所述

为了防止极慢的通配符查询,通配符术语不应以通配符*或?

仍然有一种方法可以通过使用巧妙制作的分析器来实现您想要的结果。这个想法是只索引minhash的末尾。你可以按照下面的描述来实现它。

首先,使用以下分析器创建索引:

代码语言:javascript
复制
PUT minhash-index
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "suffix": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": [
              "lowercase",
              "reverse",
              "substring",
              "reverse"
            ]
          }
        },
        "filter": {
          "substring": {
            "type": "edgeNGram",
            "min_gram": 1,
            "max_gram": 10
          }
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "minhash": {
          "type": "text",
          "analyzer": "suffix",
          "search_analyzer": "standard"
        }
      }
    }
  }
}

suffix分析器的思想是,它将为放入索引中的每个minhash索引长度为1到10的所有后缀(您可以决定索引更长的后缀)。

例如,对于minhash C50FD711C2C43287351892A4D82F44B055F048C46D2C54197AC1D1E921F11E6699C4057C4B93907518E6DCA51A672D3D3E419160DAE276CB7716D11B94D8C3BB2E4A591329B7AF973D17A7F9336342FFAAFD4D,它将索引以下所有后缀:

  • d
  • 4d
  • d4d
  • fd4d
  • afd4d
  • aafd4d
  • faffd4d
  • ffaafd4d
  • 2ffaafd4d
  • 42ffaafd4d

然后,您可以使用以下查询轻松地搜索并找到上面的minhash:

代码语言:javascript
复制
POST minhash-index/_search
{
  "query": {
    "match": {
      "minhash": "42FFAAFD4D"
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55396619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档