2014-10-09 5 views
10

Wenn ich alle Token des Indexes, den elasticsearch erzeugt, erhalten möchte (ich verwende die rails elasticsearch gem), wie würde ich das machen? Etwas zu tun, wie diese bekommt nur einen bestimmten Satz von Token für einen Suchbegriff:Wie wird der von elasticsearch erstellte invertierte Index ausgedruckt?

curl -XGET 'http://localhost:9200/development_test/_analyze?text=John Smith' 
+2

Es gibt keine API von elasticsearch, um den Lucene-Index anzuzeigen. Allerdings gibt es einige Tools wie Luke, mit denen Sie den Lucene-Index anzeigen können. Hier ist ein [Blog] [1], wie man es für elasticsearch einrichten könnte wahrscheinlich helfen. [1]: http://rosssimpson.com/blog/2014/05/06/using-luke-with-elasticsearch/ – keety

+0

Dank schaffte ich Luke und running..any Ahnung, wo der Indizes erhalten Elasticsearch erstellt werden unter Linux gespeichert? Ich habe /etc/init.d überprüft und keine .idx-Datei gefunden. – Nona

+0

Indexpfad sollte im Feld path.data in der Konfiguration von elasticsearch angegeben werden. Die Indizes sollten in einem ähnlichen Pfad wie /////indices/ – keety

Antwort

1

Sie die Scroll API mit den Term Vectors API kombinieren können Begriffe im invertierten Index aufzählen:

require "elastomer/client" 
require "set" 

client = Elastomer::Client.new({ :url => "http://localhost:9200" }) 
index = "someindex" 
type = "sometype" 
field = "somefield" 

terms = Set.new 

client.scan(nil, :index => index, :type => type).each_document do |document| 
    term_vectors = client.index(index).docs(type).termvector({ :fields => field, :id => document["_id"] })["term_vectors"] 
    if term_vectors.key?(field) 
    term_vectors[field]["terms"].keys.each do |term| 
     unless terms.include?(term) 
     terms << term 
     puts(term) 
     end 
    end 
    end 
end 

Dies ist ziemlich langsam und verschwenderisch, da es eine HTTP-Anforderung _termvectors für jedes einzelne Dokument im Index ausführt, alle Begriffe im RAM enthält und einen Bildlaufkontext für die Dauer der Aufzählung geöffnet hält. Dies erfordert jedoch kein anderes Tool wie Luke und die Begriffe können aus dem Index gestreamt werden.

Verwandte Themen