elasticsearch,.net,Vb.net,Linq,elasticsearch" /> elasticsearch,.net,Vb.net,Linq,elasticsearch" />

.net 使用LINQ处理弹性搜索结果

.net 使用LINQ处理弹性搜索结果,.net,vb.net,linq,elasticsearch,.net,Vb.net,Linq,elasticsearch,使用LINQ处理ElasticSearch结果最有效的方法是什么 我遇到了JSON.Net的 ElasticSearch返回的JSON的结构是否适合通过JObject类进行适当的LINQ查询 这是一个关于如何利用LINQ处理来自elasticsearch引擎的JSON查询结果的完整解决方案。 连接库- 首先,我使用PlainElastic.NET的唯一目的是:连接到我的elasticsearch服务器。这个库非常精简,包含简洁的GET、POST和PUT函数。这在下面的客户端连接对象中起作用re

使用LINQ处理ElasticSearch结果最有效的方法是什么

我遇到了JSON.Net的


ElasticSearch返回的JSON的结构是否适合通过JObject类进行适当的LINQ查询

这是一个关于如何利用LINQ处理来自elasticsearch引擎的JSON查询结果的完整解决方案。


连接库-

首先,我使用PlainElastic.NET的唯一目的是:连接到我的elasticsearch服务器。这个库非常精简,包含简洁的GET、POST和PUT函数。这在下面的
客户端
连接对象中起作用
result.ToString()
提供来自elasticsearch服务器的JSON响应。只需将DLL放入您的bin并添加一个引用

JSON处理器-

我正在使用NewtonSoft JSON.NET的一个强大功能来简化LINQ查询。该库有一个类
JObject
,它提供了一个可嵌套、可查询的结构来执行LINQ。查看下面的一行,在那里我抓取了
HitCount
,看看抓取单个值有多好,当然,还可以查看LINQ查询,看看如何对其进行查询。请记住,这只是一个数据结构,是解析JSON字符串的结果。只需将DLL放入您的bin并添加一个引用

对弹性搜索执行查询 现在,您可以绑定到中继器、数据列表或Gridview

MyRepeater.DataSource = SearchResults
MyRepeater.DataBind()

@布兰登莫雷茨。在SO中获得好的答案有什么害处?虽然我自己回答了这个问题并与大家分享了我的解决方案,但我很高兴看到其他人。虽然这是可行的,但它依赖于用户生成的查询。如果您使用linq来过滤结果,这一切都会发生在客户端,这有点忽略了使用elasticsearch的全部要点。我相信OP希望从链接表达式中实际生成es查询。有nuget包可以解决这个问题(例如ElasticLinq)
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
)
MyRepeater.DataSource = SearchResults
MyRepeater.DataBind()