2015-03-09 16 views
18

İşlenmemiş arama sorgusunu NEST istemcisinden almak mümkün mü?NEST istemcisinden ham sorgu alın

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

Gerçekten belli sonuçlar alıyorum neden hata ayıklamak istiyorum.

+0

olası yinelenen [Elasticsearch Nest arama sorgusunu serisini bir yolu var mı?] (http://stackoverflow.com/questions/23703570/is-there-a-way-to-deserialize-elasticsearch-nest-search-query) – bittusarkar

+0

Evet, bu bir kopyasıdır. Bayrak olacak. –

cevap

19

Sen RequestInformation ham sorgu json alabilirsiniz:

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

Ya NEST her isteğini yazdırması amacıyla Nest gelen istek yapmadan önce çıktı üretmesi

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

Sorguya ihtiyacınız varsa _before_ gönderilir: 'Encoding.UTF8.GetString (elasticClient.Serializer.Serialize (query))' – bushed

+0

sonucu RequestInformation özelliği yok, biraz eklemeliyim erişim bağımlılığı? –

+4

@RicardoSilva muhtemelen NEST 2.x kullanıyorsunuz. ve cevap akılda 1x sürümü ile yazılmıştır. [Bu] 'u kontrol edin (http://stackoverflow.com/questions/35554890/nest-2-0-enable-trace/35555214#35555214). – Rob

3

result.ConnectionStatus.Request'u kullanın.

+0

Bunu denedim ancak bayt dizisinde veri yoktu. Bunu nasıl kullandığına dair bir örnek var mı? –

+0

Gerçek kod yok, ancak görsel stüdyoda sorguların ayıklanması için rutin olarak kullanıyorum. 'Result =' üzerinde kesme noktası ayarlamaya çalışın, ardından bir adım atın ve sonuçta ne olduğuna bakın. ConnectionStatus. – rkrahl

+3

ConnectionStatus ISearchResponse içinde değil: \ – cegprakash

6

iz, senin ConnectionSettings nesne üzerinde iz etkinleştirmek Sorgu - Yuva 5.3.0 için:

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

Kabul edilen yanıt, bu iş için işe yaramadı. ES6 –

8

ElasticSearch 5.x, RequestInformation.Request özelliği ISearchResponse<T>, ancak similar to the answer provided here içinde yok, Elastic istemci seri hale getirici ve bir SearchDescriptor kullanarak ham sorgu JSON'ı oluşturabilirsiniz. Örneğin, verilen Nükleer Tehlike arama sorgusu için şu şekildedir:

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

Çiğ sorgu JSON alabilirsiniz:

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()); 
} 
ait
İlgili konular