2015-06-26 18 views
13

Mit ElasticSearch NEST habe ich Probleme, erwartete Ergebnisse aus meinen Abfragen zu erhalten. Mein Index/Typ Layout ist wie folgt:ElasticSearch NEST Mehrere Typen und alle Felder suchen

  • Theater (Index)
    • Ereignis (Typen)
    • Theater
    • Förderung
    • generic Inhalt

Jeder dieser Typen hat seine eigenen Felder und Ich verwende NESTs Index() -Methode, um die Daten zu indizieren. Ich kann bestätigen, dass es durch korrekt indiziert ist wird:

  • bei der Suche http://localhost:9200/theatres/_mapping
  • Mit dem Head Plugin Daten

als Referenz zu sehen, hier ist meine Client-Konfiguration:

// TODO: Put settings in config 
var node = new Uri("http://localhost:9200"); 
var connSettings = new ConnectionSettings(node); 
connSettings.SetDefaultIndex("theatres"); 
connSettings.ThrowOnElasticsearchServerExceptions(); 

var client = new ElasticClient(connSettings); 

Die Abfrage

Jetzt, für die Abfrage, möchte ich alle Typen und alle Felder innerhalb des Index suchen. Mit Hilfe der Kopf-Plugin, ich bin in der Lage, die Abfrage zu generieren und die erwarteten Ergebnisse erhalten: enter image description here

diese Abfrage verwenden, die es erzeugt, habe ich versucht, die folgende NEST query:

var query = "waukesha"; // This would be passed in 

var resp = client.Search<dynamic>(s => s 
    .From(0) 
    .Take(10) 
    .Query(qry => qry 
     .Bool(b => b 
     .Must(m => m 
      .QueryString(qs => qs 
       .DefaultField("_all") 
       .Query(query)))))); 

aber das gibt mir ein anderes Ergebnis. Macht NEST etwas hinter den Kulissen, das mir nicht bewusst ist? Oder wird das nicht unterstützt?

+0

Ich würde vorschlagen, .Size (10) anstelle von .Nehmen (20) nur zu Entfernen Sie das als eine Variable für Fehler, obwohl die Funktionalität identisch sein sollte. Auch ich glaube, dass Sie .DefaultField entfernen können und alle Felder gesucht werden. Könntest du das versuchen? Ich bin neugierig –

+1

@ DanielHoffmann-Mitscherling Ich aktualisierte dies und immer noch 0 Ergebnisse, wenn ich 1. bekommen sollte. –

+1

So komisch! Können Sie DefaultField ("_ all") hinzufügen und auch .AllTypes() hinzufügen? NEST manuell zu zwingen, eine Abfrage mit allen Typen zu erstellen, könnte uns mehr Informationen geben. –

Antwort

17

Ihre Anfrage fehlt .AllTypes()

Sie können auch mehrere Typen mit .Types("type1", "type1")

So geben:

var query = "waukesha"; // This would be passed in 

var resp = client.Search<dynamic>(s => s 
    .AllTypes() 
    .From(0) 
    .Take(10) 
    .Query(qry => qry 
     .Bool(b => b 
     .Must(m => m 
      .QueryString(qs => qs 
       .DefaultField("_all") 
       .Query(query)))))); 
+0

Können wir hier einen typbasierten Termfilter verwenden? Beispiel: Zwei Typen: "type1", "type2" type1 mit: name, locationid, type2 mit: countryid und statidid mit diesem wie können wir hier typenbasierte term filter hier? –

+0

@MohanGopi - Ja: '.Type () .Type ()' –

Verwandte Themen