簡體   English   中英

Elasticsearch Minhash前綴查詢帶有通配符?

[英]Elasticsearch minhash prefix query with wildcards?

我有一個為某些文本生成的minhash字段(基於minhash算法),現在我的問題是,是否可以通過通配符以某種方式補充或添加前綴查詢? 因為存在問題,所以哈希字符串值是基於帶狀對象/令牌的內容(文本)位置的。 因此,前幾個字符(前綴)可能並不總是與相似內容完全匹配。 是否可以在查詢前綴之前添加通配符,例如* 3AF8659GJ?

編輯:我想我沒有認真思考這個問題。 哈希差異可以在哈希字符串中的任何位置(基於文本差異的內容位置中的文本差異)。 因此,我認為“最佳”的唯一方法是編輯距離和一些閾值。

例如,將所有散列放入一個數組中,並按詞法排序(或如何對十六進制字符串進行排序?),然后只比較下k個文檔,直到達到編輯距離閾值為止,然后將重復項放入一個單獨的數組中..

出於性能方面的考慮,強烈建議不要使用后綴進行搜索,如官方文檔中所述

為了防止極慢的通配符查詢,通配符術語不應以通配符*或?開頭。

仍然可以通過使用精巧的分析儀來實現所需的方法。 這個想法是只索引minhash的結尾。 您可以按照以下說明實現它。

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

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:

POST minhash-index/_search
{
  "query": {
    "match": {
      "minhash": "42FFAAFD4D"
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM