2012-11-15 11 views
31

Der Zugriff auf den analysierten/in Tokens enthaltenen Text in meinen ElasticSearch-Dokumenten.Abrufen von analysierten Token aus ElasticSearch-Dokumenten

Ich weiß, dass Sie die Analyze API verwenden können, um beliebigen Text nach Ihren Analysemodulen zu analysieren. So konnte ich Daten aus meinen Dokumenten in die Analyze-API kopieren und einfügen, um zu sehen, wie sie in Token umgewandelt wurde.

Dies scheint jedoch unnötig zeitaufwendig. Gibt es eine Möglichkeit, ElasticSearch anweisen, den in Token enthaltenen Text in den Suchergebnissen zurückzugeben? Ich habe die Dokumente durchgesehen und habe nichts gefunden.

Antwort

14

Schauen Sie sich diese andere Antwort an: elasticsearch - Return the tokens of a field. Leider ist es erforderlich, den Inhalt Ihres Feldes mit dem mitgelieferten Skript zu analysieren.
Es sollte möglich sein, ein Plugin zu schreiben, um diese Funktion verfügbar zu machen. Die Idee wäre, zwei Endpunkte hinzuzufügen:

  • erlauben auch die lucene TermsEnum wie die solr TermsComponent tut, nützlich zu machen Auto-Vorschläge zu lesen. Beachten Sie, dass es nicht pro Dokument, nur jeder Begriff auf dem Index mit dem Begriff Frequenz und Dokumenthäufigkeit (potentiell teuer mit vielen einzigartigen Bedingungen)
  • erlauben würde, den Begriff Vektoren, wenn aktiviert, wie die solr TermVectorComponent tut zu lesen. Dies würde pro Dokument sein, erfordert aber das Speichern der Termvektoren (Sie können es in Ihrem Mapping konfigurieren) und ermöglicht auch das Abrufen von Positionen und Offsets, falls aktiviert.
+0

Ich hatte auch eine Notwendigkeit für den ersten Fall dort, aber ich interessiere mich nicht für die Frequenzen, ich will nur eine Liste - so ist mein Plan nur durch den Feld Datencache iterieren (wie die regulären Begriff Facette tut) aber ohne die Zählungen zu sammeln. Ich habe ein teilweise geschriebenes Plugin dafür. –

+0

Schöne Arbeit, es wäre schön, wenn Sie es auf GitHub teilen können! :) – javanna

+0

wenn du mich meinst - ja ich werde wenn es fertig ist, hier: https://github.com/ptdavteam/elasticsearch-approx-plugin –

15

Diese Frage ist ein wenig alt, aber vielleicht denke ich, dass eine zusätzliche Antwort notwendig ist.

Mit ElasticSearch 1.0.0 wurde die Term Vector API hinzugefügt, die Ihnen direkten Zugriff auf die Tokens ElasticSearch-Speicher unter der Haube auf Dokumentbasis gibt. Die API-Dokumente sind dazu nicht sehr klar (nur im Beispiel erwähnt), aber um die API zu verwenden, müssen Sie zuerst in Ihrer mapping definition angeben, dass Sie Termvektoren mit der Eigenschaft term_vector in jedem Feld speichern möchten.

5

Möglicherweise möchten Sie Skripting verwenden, auf Ihrem Server sollte jedoch das Skripting aktiviert sein.

curl 'http://localhost:9200/your_index/your_type/_search?pretty=true' -d '{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "script_fields": { 
     "terms" : { 
      "script": "doc[field].values", 
      "params": { 
       "field": "field_x.field_y" 
      } 
     } 
    } 
}' 

Die Standardeinstellung für das Erlauben des Skript auf der Elasticsearch Version abhängt, so überprüfen Sie bitte, dass aus der offiziellen Dokumentation aus.

Verwandte Themen