【问题标题】:Retrieve data from elasticsearch results从弹性搜索结果中检索数据
【发布时间】:2014-06-17 03:19:45
【问题描述】:

我正在编写一个方法,该方法将在弹性搜索中搜索确定的查询字符串,我得到的结果包含几个数据,例如 Highlights、Hits、score;但是我只想获取和访问文档中的数据,如何在 C# 中实现呢?

这是我目前的代码:

public string GetByOpinionDocumentTextElastic(string queryString)
    {
        var settings = new ConnectionSettings(new Uri(ConfigurationManager.AppSettings["ElasticSearchAddress"])).SetDefaultIndex("caselaw");
        var client = new ElasticClient(settings);

        var result = client.Search<OpinionDocumentIndexRecord>(body => body.Query(query => query.QueryString(qs => qs.Query(queryString))));


    }

我的方法应该返回什么?提前致谢!

【问题讨论】:

    标签: c# .net elasticsearch nest


    【解决方案1】:

    您从哪里获取文档取决于您使用的 Nest 版本。来自Nest 1.0 Breaking Changes page

    DocumentsWithMetaData

    当您使用 NEST 0.12 进行搜索时,您会得到一个 QueryResponse&lt;T&gt; 并通过两种方式循环您的结果。 .DocumentsIEnumerable&lt;T&gt;.DocumentsWithMetaData 是和 IEnumerable&lt;IHit&lt;T&gt;&gt; 取决于您的需要,其中一个可能更容易使用。

    从 NEST 1.0 开始,.DocumentsWithMetaData 现在简称为 .Hits

    所以给出你的代码示例:

    巢 0.12

     result.Documents
    
     result.DocumentsWithMetaData
    

    巢 1.0

      result.Hits
    

    与 0.12 属性的最大区别在于 .Documents 只是搜索结果的集合,直接映射到您的类型 OpinionDocumentIndexRecord。虽然.DocumentsWithMetaData 具有其他 Elasticsearch 属性,例如 Highlights、Fields、Explanation、Type,但 Source 属性是您的 OpinionDocumentIndexRecord。您需要或想要的很可能取决于您的特定应用程序/业务需求。

    因此,如果您使用的是 Nest 0.12.0,并且想要一个可以轻松移植到 Nest 1.0.0 的解决方案,我建议您使用 .DocumentsWithMetaData,然后您可以在升级 Nest 客户端时更改为 .Hits

    如果您真的只关心OpinionDocumentIndexRecord 而不管您从结果中访问什么属性,那么您可以使用以下之一:

     var myData = new List<OpinionDocumentIndexRecord>();
     foreach (var hit in results.DocumentsWithMetaData)
     //foreach (var hit in results.Hits) //for Nest 1.0
     {
           myData.Add(hit.Source);
     }
    
     return myData;
    

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2014-10-23
    相关资源
    最近更新 更多