2015-09-25 17 views
10

c'è qualche plugin che consente LSH su Elasticsearch? Se sì, potresti indicarmi il luogo e dirmi un po 'come usarlo? Graziehashing sensibile alla località - Elasticsearch

Modifica: Ho scoperto che ES utilizza il plug-in MinHash. Come potrei confrontare i documenti tra loro con questo? Quale sarebbe una buona impostazione per trovare duplicati?

+1

Interessato anche! – AdrianGW

risposta

2
  1. C'è un Elasticsearch MinHash Plugin. Puoi usarlo per estrarre il valore di minhash ogni volta che indicizzi un documento e esegui una query sul documento con minhash in seguito.

    1. Installare MinHash plugin:

      $ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-minhash/2.3.1 
      
    2. Aggiungi un analizzatore minhash quando si crea l'indice:

      $ curl -XPUT 'localhost:9200/my_index' -d '{ 
          "index":{ 
          "analysis":{ 
           "analyzer":{ 
           "minhash_analyzer":{ 
            "type":"custom", 
            "tokenizer":"standard", 
            "filter":["minhash"] 
           } 
           } 
          } 
          } 
      }' 
      
    3. Mettere minhash_value campo in un indice delle mappe:

      $ 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. Il valore minhash viene calcolato automaticamente quando si aggiunge un documento all'indice creato con analizzatore minhash.
    5. a. Use More like this query può essere usato per fare "come" ricerca sul campo minhash_value:

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

      b. È inoltre possibile utilizzare fuzzy query ma accetta la query in modo che differisca dal risultato per 2 (massimo).

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

      È possibile trovare maggiori sulla query sfocata here.

  2. In alternativa, è possibile creare il valore hash al di fuori di elasicsearch (scrivere un codice per estrarre valore di hash) e ogni indice di un documento, è possibile eseguire il codice e fissare il valore hash del documento si è indicizzazione. E successivamente cerca con il valore hash usando More Like This query o Fuzzy query come descritto sopra.
  3. Ultimo ma non meno importante, è possibile scrivere il plugin elasticsearch come sopra (che si adatta all'algoritmo di hash) e fare lo stesso passo sopra.
+0

È possibile utilizzare solo le query fuzzy sui campi di parole chiave e di testo, non su [minhash_value] che è di tipo [minhash] – alizx