2016-06-20 8 views
0

Ich versuche NEST für die Suche durch elastische Suche Indexex, die mit Logstash (im Grunde Logstash-*) erstellt wurden.Wie Logstash-Indizes mit .net Elasticsearch Client abfragen?

Ich habe Setup NEST mit folgendem Code:

Node = new Uri("http://localhost:9200"); 
Settings = new ConnectionSettings(Node); 
Settings.DefaultIndex("logstash-*"); 
Client = new ElasticClient(Settings); 

das ist, wie ich versuche, um Ergebnisse zu erhalten:

var result = Client.Search<Logstash>(s => s 
      .Query(p => p.Term("Message", "*"))); 

und ich bekomme 0 Treffer: http://screencast.com/t/d2FB9I4imE

Hier ist ein Beispiel für Eintrag Ich möchte Folgendes finden:

{ 
    "_index": "logstash-2016.06.20", 
    "_type": "logs", 
    "_id": "AVVtswJxpdkh1tFPP9S5", 
    "_score": null, 
    "_source": { 
    "timestamp": "2016-06-20 14:04:55.6650", 
    "logger": "xyz", 
    "level": "debug", 
    "message": "Processed command service method SearchService.SearchBy in 65 ms", 
    "exception": "", 
    "url": "", 
    "ip": "", 
    "username": "", 
    "user_id": "", 
    "role": "", 
    "authentication_provider": "", 
    "application_id": "", 
    "application_name": "", 
    "application": "ZBD", 
    "@version": "1", 
    "@timestamp": "2016-06-20T12:04:55.666Z", 
    "host": "0:0:0:0:0:0:0:1" 
    }, 
    "fields": { 
    "@timestamp": [ 
     1466424295666 
    ] 
    }, 
    "sort": [ 
    1466424295666 
    ] 
} 

Ich benutze Version 5.0.0-alpha3, und NEST-Client ist alpha2 Version ATM. Diese

Antwort

2

ist wegen

... 
"_type": "logs", 
... 

Wenn Sie Abfrage wie das Ihre tun es logstash nicht logs Art getroffen werden, weil NEST Namen von generischen Parameter eingeben folgert. Sie haben zwei Möglichkeiten, um dieses Problem zu lösen.

  1. Tells NEST Logstash Typ logs Typen zuzuordnen, wenn antrag, Elasticsearch von Einstellungen diese Zuordnung in Client-Einstellung:

    var settings = new ConnectionSettings() 
        .MapDefaultTypeNames(m => m.Add(typeof(Logstash), "logs"); 
    
    var client = new ElasticClient(settings); 
    
  2. außer Kraft setzt Standardverhalten von in Anforderung Einstellung explizit eingeben Parameter:

    var result = Client.Search<Logstash>(s => s 
        .Type("logs") 
        .Query(p => p.Term("message", "*"))); 
    

    Beachten Sie auch, dass Sie message nicht Message in Term Descriptor verwenden sollten, da Sie kein solches Feld im Index haben. Zweitens ist dies so weit wie ich wissen Wildcards werden nicht in Begriff Abfrage unterstützt. Möglicherweise möchten Sie stattdessen query string verwenden.

Ich hoffe, es hilft.