यह LINQ का उपयोग करने के लिए LINQ का उपयोग करने के लिए एक पूर्ण समाधान है, जो elasticsearch इंजन से JSON क्वेरी-परिणामों को संसाधित करने के लिए है।
कनेक्शन लाइब्रेरी - PlainElastic.NET
सबसे पहले, मैं एक ही उद्देश्य के लिए PlainElastic.NET उपयोग कर रहा हूँ: मेरे elasticsearch सर्वर से कनेक्ट करने के लिए। यह पुस्तकालय बहुत दुबला है और संक्षेप में मिलता है, पोस्ट, और PUT कार्यों। यह client
कनेक्शन ऑब्जेक्ट के साथ नीचे खेल में आता है। result.ToString()
elasticsearch सर्वर से JSON प्रतिक्रिया प्रदान करता है। बस अपने बिन में डीएलएल थप्पड़ मारो और एक संदर्भ जोड़ें।
JSON प्रोसेसर - JSON.NET
मैं LINQ प्रश्नों की सुविधा के लिए NewtonSoft JSON.NET का एक बड़ा सुविधा का उपयोग कर रहा हूँ। पुस्तकालय में कक्षा JObject
है जो LINQ के विरुद्ध निष्पादित करने के लिए एक घोंसलाशील, क्वेरी करने योग्य संरचना प्रदान करता है। नीचे दी गई रेखा देखें जहां मैं HitCount
पकड़ता हूं यह देखने के लिए कि एक व्यक्तिगत मूल्य को पकड़ना कितना अच्छा है, और, ज़ाहिर है, LINQ क्वेरी को जांचें कि इसके खिलाफ पूछताछ कैसे करें। याद रखें, यह केवल एक डेटा-संरचना है जो JSON स्ट्रिंग को पार्स करने का परिणाम है। बस अपने बिन में डीएलएल थप्पड़ मारो और एक संदर्भ जोड़ें।
के खिलाफ लचीला खोजें
'Execute the Search
Dim client = New ElasticConnection("localhost", 9200)
Dim result = client.Post("myindex/mytype/_search", elastic_query) 'elastic_query = well-formatted elasticsearch query (json string)'
Dim J As JObject = JObject.Parse(result.ToString())
'How many results were located?
Dim HitCount = CInt(J("hits")("total"))
'What was the maximum score? Maybe you want to know this for normalizing scores to 0-100.
' - We make sure we have hits first
' - Also, make sure scoring is turned on. It might be turned off if an alternate sort method is used in your query
If HitCount > 0 AndAlso J("hits")("max_score").Type <> JTokenType.Null Then MaxScore = CDbl(J("hits")("max_score"))
पूछताछ
अब LINQ
साथ परिणाम का संसाधन, LINQ का उपयोग GridViews के लिए बाध्य, DataLists, पुनरावर्तक के लिए एक सुंदर गुमनाम वस्तु प्रदान करने के लिए, आदि मैं जानबूझकर कर रहा हूँ एक गैर-तुच्छ LINQ क्वेरी का एक उदाहरण प्रदान करना। इस उदाहरण नेस्ट हो जाता है डेटा (
Stores
,
Categories
)
Dim SearchResults = _
(From X In J("hits")("hits")
Select
score = CDec(If(X("_score").Type = JTokenType.Null, 0, X("_score"))),
boost = CDbl(X("_source")("_boost")),
InstitutionID = CInt(X("_source")("InstitutionID")),
Name = CStr(X("_source")("Name")),
Stores = (From S In X("_source")("Stores") Select CInt(S("StoreID"))).ToList(),
Categories = (From Z In X("_source")("Categories") Select CatID = CInt(Z("CatID")), CatName = CStr(Z("CatName")), InstitutionID = CInt(X("_source")("InstitutionID"))).ToList()
Order By score Descending, boost Descending
)
अब, आप एक पुनरावर्तक के लिए बाध्य कर सकते हैं, DataList, या GridView
MyRepeater.DataSource = SearchResults
MyRepeater.DataBind()
@BrandonMoretz [यह पूछें और उत्तर अपने प्रश्न ठीक है ] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)। एसओ में अच्छे जवाब पाने में क्या नुकसान है? – MikeSmithDev
हालांकि मैंने अपने समाधान को साझा करने के लिए इसका उत्तर दिया है, लेकिन मुझे दूसरों को देखने में खुशी होगी। –