2015-09-25 4 views
10

Gibt es ein Plugin, das LSH auf Elasticsearch erlaubt? Wenn ja, könntest du mich auf den Ort verweisen und mir ein wenig sagen, wie man es benutzt? DankeLocality-sensitive Hashing - Elasticsearch

Edit: Ich fand heraus, dass ES MinHash-Plugin verwendet. Wie könnte ich damit Dokumente miteinander vergleichen? Was wäre eine gute Einstellung, um Duplikate zu finden?

+1

Auch interessiert! – AdrianGW

Antwort

2
  1. Es gibt eine Elasticsearch MinHash Plugin. Sie können es verwenden, um den Minhash-Wert jedes Mal zu extrahieren, wenn Sie ein Dokument indizieren und das Dokument später per Minhash abfragen.

    1. installieren MinHash Plugin:

      $ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-minhash/2.3.1 
      
    2. einen minhash Analysator hinzufügen, wenn der Index zu erstellen:

      $ curl -XPUT 'localhost:9200/my_index' -d '{ 
          "index":{ 
          "analysis":{ 
           "analyzer":{ 
           "minhash_analyzer":{ 
            "type":"custom", 
            "tokenizer":"standard", 
            "filter":["minhash"] 
           } 
           } 
          } 
          } 
      }' 
      
    3. Put minhash_value Feld in einen Index-Mapping:

      $ 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. Der Minhash-Wert wird automatisch berechnet, wenn das Dokument zum Index hinzugefügt wird, den Sie mit minhash analyzer erstellt haben.
    5. a.

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

      b: Use More like this query kann "wie" Suche auf dem minhash_value Feld zu tun, verwendet werden. Sie können auch fuzzy query verwenden, aber es akzeptiert die Abfrage von dem Ergebnis von 2 (Maximum) abweichen.

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

      Sie können here mehr über die Fuzzy-Abfrage finden.

  2. Oder Sie können außerhalb von elasicsearch (schreiben einen Code zu extrahieren Hash-Wert) und jedes Mal wenn Sie Index ein Dokument, das Sie den Code ausführen kann, und befestigen Sie den Hash-Wert mit dem Dokument, das Sie sind Indizierung den Hash-Wert erstellen. Und später suchen Sie mit dem Hash-Wert mit More Like This query oder Fuzzy query wie oben beschrieben.
  3. Last but not least können Sie elasticsearch plugin selbst wie oben beschrieben schreiben (was zu Ihrem Hash-Algorithmus passt) und den gleichen Schritt oben ausführen.
+0

Kann nur Fuzzy-Abfragen für Schlüsselwort- und Textfelder verwenden - nicht für [minhash_value] vom Typ [minhash] – alizx