2014-10-17 14 views
5

Ho una domanda di base elasticsearch che assomiglia a questoElasticsearch.net cliente non può fare ricerca di base

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

ottengo risultato di nuovo, nessun problema quando corro in un senso.

così cerco di fare questo in elasticsearch.net

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

e ottengo alcun risultato indietro. Se ho appena un corpo di ricerca con nuovo {}, ricevo i risultati ma non i filtri.

Cosa sto sbagliando?

+0

che è strano ha lavorato per me – keety

+0

penso Nest potrebbe caratteri minuscoli Nome. È possibile serializzare e registrare la ricerca per eseguire il debug. –

+0

Che ne dici di andare passo dopo passo attraverso il tuo codice e cercare di scoprire da dove proviene il problema? – Aybe

risposta

8

Se si utilizza il client di basso livello (elasticsearch.net) direttamente non farà alcuna normalizzazione e puntate l'oggetto testualmente:

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

questo si tradurrà al seguente JSON:

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

Se si utilizza NEST il comportamento predefinito è quello di CamelCase nomi di proprietà (NEST è supponente):

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

Se si utilizza il client di livello basso tramite il client di livello elevato (client.Raw), utilizzerà le stesse identiche impostazioni di serializzazione del client di livello superiore.

È possibile controllare questo comportamento sul client di alto livello attraverso:

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

Grazie per la risposta. Penso ancora che l'involucro dovrebbe essere lasciato solo se l'utente non lo implementa. –

+1

Sono d'accordo, NEST è qualcosa che ho scritto per lo più a uso personale mentre stavo integrando elasticsearch nelle mie applicazioni nel 2010. La convenzione era in cottura da allora e anche se NEST è stato completamente riscritto internamente portando alla sua versione 1.0 cambiando ora sarebbe causa a molti problemi per gli utenti esistenti. Quando abbiamo diviso il client di basso livello, l'abbiamo scelto deliberatamente per NON avere una magia come questa. –