从elasticsearch结果中检索数据

时间:2014-04-30 17:18:42

标签: c# .net elasticsearch nest

我正在编写一种方法,搜索弹性搜索确定的查询字符串,我得到的结果有几个数据,如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))));


    }

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

1 个答案:

答案 0 :(得分:3)

从中获取文档的位置可能取决于您使用的Nest版本。来自Nest 1.0 Breaking Changes page

  

<强> DocumentsWithMetaData

     

当您使用NEST 0.12进行搜索时,您可以通过两种方式返回QueryResponse<T>来循环搜索结果。 .DocumentsIEnumerable<T>.DocumentsWithMetaDataIEnumerable<IHit<T>>取决于您的需求,其中一个可能更容易使用。

     

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

所以给出你的代码示例:

NEST 0.12

 result.Documents

 result.DocumentsWithMetaData

NEST 1.0

  result.Hits

与0.12属性的最大区别在于.Documents只是搜索结果的集合,直接映射到您的类型OpinionDocumentIndexRecord。虽然.DocumentsWithMetaData具有其他Elasticsearch属性,例如“精彩集锦”,“字段”,“解释”,“类型”,但“源”属性可用作OpinionDocumentIndexRecord。您需要或想要的最有可能取决于您的具体应用/业务需求。

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

如果你真的只关心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;

希望这有帮助。