termostato soporte madrid instalador instalacion guia espaƱa espanol camara elasticsearch nest

elasticsearch - madrid - soporte nest



Obtener consulta sin formato del cliente NEST (6)

¿Es posible obtener la consulta de búsqueda sin formato del cliente NEST?

var result = client.Search<SomeType>(s => s .AllIndices() .Type("SomeIndex") .Query(query => query .Bool(boolQuery => BooleanQuery(searchRequest, mustMatchQueries))) );

Realmente me gustaría depurar por qué estoy obteniendo ciertos resultados.


Antes de realizar la solicitud, desde Nest Query - Para Nest 5.3.0:

var stream = new System.IO.MemoryStream(); elasticClient.Serializer.Serialize(query, stream ); var jsonQuery = System.Text.Encoding.UTF8.GetString(stream.ToArray());


En ElasticSearch 5.x, la propiedad ISearchResponse<T> no existe en ISearchResponse<T> , pero de manera similar a la respuesta proporcionada aquí , puede generar el JSON de consulta sin formato utilizando el Eial Client Serializer y un SearchDescriptor. Por ejemplo, para la consulta de búsqueda NEST dada:

var results = elasticClient.Search<User>(s => s .Index("user") .Query(q => q .Exists(e => e .Field("location") ) ) );

Puede obtener la consulta JSON en bruto de la siguiente manera:

SearchDescriptor<User> debugQuery = new SearchDescriptor<User>() .Index("user") .Query(q => q .Exists(e => e .Field("location") ) ) ; using (MemoryStream mStream = new MemoryStream()) { elasticClient.Serializer.Serialize(debugQuery, mStream); string rawQueryText = Encoding.ASCII.GetString(mStream.ToArray()); }


Los métodos para hacer esto parecen cambiar con cada versión principal, de ahí el número confuso de respuestas. Si desea que esto funcione en NEST 6.x, Y desea ver la solicitud deserializada ANTES de que se envíe , es bastante fácil:

var json = elasticClient.RequestResponseSerializer.SerializeToString(request);

Si estás depurando en Visual Studio, es útil colocar un punto de interrupción justo después de esta línea, y cuando lo golpeas, pasa el cursor sobre la variable json arriba y golpea la cosita de lupa . Obtendrá una bonita vista formateada de JSON.


Para NEST / Elasticsearch.NET v6.0.2, use la propiedad ApiCall del objeto IResponse. Puedes escribir un método de extensión útil como este:

public static string ToJson(this IResponse response) { return Encoding.UTF8.GetString(response.ApiCall.RequestBodyInBytes); }

O, si desea registrar todas las solicitudes realizadas a Elastic, puede interceptar respuestas con el objeto de conexión:

var node = new Uri("https://localhost:9200"); var pool = new SingleNodeConnectionPool(node); var connectionSettings = new ConnectionSettings(pool, new HttpConnection()); connectionSettings.OnRequestCompleted(call => { Debug.Write(Encoding.UTF8.GetString(call.RequestBodyInBytes)); });


Puede obtener la consulta sin formato json desde RequestInformation :

var rawQuery = Encoding.UTF8.GetString(result.RequestInformation.Request);

O habilite el rastreo en su objeto ConnectionSettings , para que NEST imprima cada solicitud para rastrear la salida

var connectionSettings = new ConnectionSettings(new Uri(elasticsearchUrl)); connectionSettings.EnableTrace(true); var client = new ElasticClient(connectionSettings);


Utilice result.ConnectionStatus.Request .