2014-10-17 3 views
5

Ich habe eine grundlegende Elasticsearch Abfrage, die zurückkommen, keine Probleme ergeben, wie dies IchElasticsearch.net Client, wenn ich laufe in Sinne tun kann nicht einfache Suche

POST /fruit/_search 
{"query":{"term":{"Name":"banana"}}} 

aussieht.

Also versuche ich dies in elasticsearch.net zu tun

var requestBody = new { query = new { term = new { Name = "banana" } } }; 
       var result = client.Search<string>("fruit", requestBody); 

Und ich bekomme keine Ergebnisse zurück. Wenn ich nur einen Suchkörper mit neuem {} habe, bekomme ich Treffer, aber nicht gefiltert.

Was mache ich falsch?

+0

, die für mich seltsam gearbeitet ist – keety

+0

denke ich Nest Namen Kleinschreibung könnte. Sie können die Suche serialisieren und protokollieren, um sie zu debuggen. –

+0

Wie wäre es, Schritt für Schritt durch Ihren Code zu gehen und herauszufinden, woher das Problem kommt? – Aybe

Antwort

8

Wenn Sie das niedrige Niveau Client (elasticsearch.net) direkt verwenden wird es keine Normalisierung tun und serialise das Objekt wörtlich:

var query = new { query = new { term = new { Name = "banana" } } }; 
var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String(); 

dies folgende json führen:

{ 
    "query": { 
    "term": { 
     "Name": "banana" 
    } 
    } 
} 

Wenn Sie NEST das Standardverhalten verwenden ist Eigenschaftsnamen zu Camelcase (NEST ist eigenwillig):

{ 
    "query": { 
    "term": { 
     "name": "banana" 
    } 
    } 
} 

Wenn Sie den Low-Level-Client über den High-Level-Client (client.Raw) verwenden, verwendet er exakt die gleichen Serialisierungseinstellungen wie der High-Level-Client.

können Sie dieses Verhalten steuern, auf dem hohen Niveau Client durch:

var connectionSettings = new ConnectionSettings() 
    .SetDefaultPropertyNameInferrer(p=>p); 
var client = new ElasticClient(connectionSettings); 
+1

Danke für die Antwort. Ich denke immer noch, Gehäuse sollte in Ruhe gelassen werden, wenn nicht der Benutzer es selbst implementiert. –

+1

Ich stimme zu, NEST ist etwas, was ich hauptsächlich für meinen eigenen Gebrauch geschrieben habe, während ich elasticsearch 2010 in meine Anwendungen integriert habe. Die Konvention wurde seither aufgenommen und obwohl NEST intern komplett neu geschrieben wurde, führte das zu seiner 1.0 Veröffentlichung Ursache für viele Probleme für bestehende Benutzer. Bei der Aufteilung des Low-Level-Clients haben wir uns bewusst dafür entschieden, KEINE Magie wie diese zu haben. –

Verwandte Themen