2015-03-09 14 views
18

क्या नेट क्लाइंट से कच्ची खोज क्वेरी प्राप्त करना संभव है?NEST क्लाइंट से कच्चे प्रश्न प्राप्त करें

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

मैं वास्तव में डीबग करना चाहता हूं कि मुझे कुछ परिणाम क्यों मिल रहे हैं।

+0

संभव डुप्लिकेट [वहाँ Elasticsearch नेस्ट खोज प्रश्न deserialize करने के लिए एक तरीका है?] (http://stackoverflow.com/questions/23703570/is-there-a-way-to-deserialize-elasticsearch-nest-search-query) – bittusarkar

+0

हाँ यह एक डुप्लिकेट है। ध्वज होगा –

उत्तर

19

आप RequestInformation से कच्चे क्वेरी json प्राप्त कर सकते हैं:

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

या ट्रेस उत्पादन

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

यदि आपको क्वेरी की आवश्यकता है _before_ इसे भेजा गया है: 'Encoding.UTF8.GetString (elasticClient.Serializer.Serialize (क्वेरी))' – bushed

+0

परिणाम में अनुरोध जानकारी नहीं है, मुझे कुछ जोड़ने की आवश्यकता है इसे एक्सेस करने की निर्भरता? –

+4

@ रिकार्डो सिल्वा संभवतः आप नेट 2.x का उपयोग कर रहे हैं। और जवाब दिमाग में संस्करण 1.x के साथ लिखा गया था। [यह] जांचें (http://stackoverflow.com/questions/35554890/nest-2-0-enable-trace/35555214#35555214) एक। – Rob

3

result.ConnectionStatus.Request का उपयोग करें।

+0

मैंने कोशिश की लेकिन बाइट सरणी में कोई डेटा नहीं था। क्या आपको इसका उदाहरण मिला है कि आप इसका उपयोग कैसे करते हैं? –

+0

वास्तविक कोड में नहीं, लेकिन मैं नियमित रूप से दृश्य स्टूडियो में क्वेरी के डीबगिंग के लिए इसका उपयोग करता हूं। 'परिणाम =' पर ब्रेकपॉइंट सेट करने का प्रयास करें, फिर एक स्टेपओवर बनाएं और फिर देखें कि परिणामस्वरूप आपको क्या मिला। कनेक्शन कनेक्शन। – rkrahl

+3

कनेक्शनस्टैटस ISARCHResponse में नहीं है: \ – cegprakash

6

पता लगाने के लिए अनुरोध करने से पहले, घोंसला से तो घोंसला प्रत्येक अनुरोध प्रिंट होगा, अपने ConnectionSettings वस्तु पर सक्षम प्रश्न - नेस्ट 5.3.0:

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

स्वीकृत उत्तर मेरे लिए यह काम नहीं करता है। ES6 –

8

लोचदार खोज 5.x में, RequestInformation.Request संपत्ति ISearchResponse<T> में मौजूद नहीं है, लेकिन similar to the answer provided here आप लोचदार ग्राहक Serializer और एक खोज डिस्क्रिप्टर का उपयोग कर कच्चे क्वेरी JSON उत्पन्न कर सकते हैं। उदाहरण के लिए, यह देखते हुए घोंसला खोज क्वेरी के लिए:

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

आप कच्चे क्वेरी JSON इस प्रकार प्राप्त कर सकते हैं:

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()); 
} 
की
संबंधित मुद्दे