局部敏感散列 - Elasticsearch

时间:2015-09-25 08:09:00

标签: elasticsearch locality-sensitive-hash minhash

是否有任何插件允许在Elasticsearch上使用LSH?如果是的话,你能指点我的位置,并告诉我一些如何使用它? 感谢

编辑: 我发现ES使用MinHash插件。我怎么能用这个比较文件呢?找到重复的好设置是什么?

1 个答案:

答案 0 :(得分:2)

  1. 有一个Elasticsearch MinHash Plugin。每次索引文档并稍后通过minhash查询文档时,可以使用它来提取minhash值。

    1. 安装MinHash插件:

      $ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-minhash/2.3.1
      
    2. 创建索引时添加minhash分析器:

      $ curl -XPUT 'localhost:9200/my_index' -d '{
        "index":{
          "analysis":{
            "analyzer":{
              "minhash_analyzer":{
                "type":"custom",
                "tokenizer":"standard",
                "filter":["minhash"]
              }
            }
          }
        }
      }'  
      
    3. minhash_value字段放入索引映射:

      $ curl -XPUT "localhost:9200/my_index/my_type/_mapping" -d '{
        "my_type":{
          "properties":{
            "message":{
              "type":"string",
              "copy_to":"minhash_value"
            },
            "minhash_value":{
              "type":"minhash",
              "minhash_analyzer":"minhash_analyzer"
            }
          }
        }
      }'
      
    4. 将文档添加到使用minhash analyzer创建的索引时,会自动计算minhash值。
    5. 一个。 Use More like this query可以用来做"喜欢"在minhash_value字段上搜索:

      GET /_search
      {
          "query": {
              "more_like_this" : {
                  "fields" : ["minhash_value"],
                  "like" : "KV5rsUfZpcZdVojpG8mHLA==",
                  "min_term_freq" : 1,
                  "max_query_terms" : 12
              }
          }
      }
      

      湾您也可以使用fuzzy query,但它接受的查询与2(最大)的结果不同。

      GET /_search
      {
          "query": {
             "fuzzy" : { "minhash_value" : "KV5rsUfZpcZdVojpG8mHLA==" }
          }
      } 
      

      您可以找到有关模糊查询here的更多信息。

  2. 或者您可以在elasicsearch之外创建哈希值(编写代码以提取哈希值),每次索引文档时,您都可以运行代码并将哈希值附加到要编制索引的文档中。然后使用More Like This queryFuzzy query搜索哈希值,如上所述。
  3. 最后但并非最不重要的是,您可以像上面那样自己编写elasticsearch插件(适合您的哈希算法)并执行相同的步骤。