从检索结果elasticsearch数据(Retrieve data from elasticsea

2019-10-20 00:54发布

我正在写将弹性搜索中搜索确定的查询字符串的方法,我与几个数据,如突出了结果,命中,比分; 但我只想获取和访问是在文档中的数据,我怎么能做到这一点在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))));


    }

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

Answer 1:

你在哪里得到您的文档,从可以依赖基于巢的版本所使用。 从鸟巢1.0重大更改页面 :

DocumentsWithMetaData

当你做NEST 0.12搜索你会得到一个QueryResponse<T>有超过你的结果两种方式来循环。 .DocumentsIEnumerable<T>.DocumentsWithMetaData是和IEnumerable<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 。 您需要或想要将最有可能取决于特定的应用/业务需求。

所以,如果你使用的是巢0.12.0和希望,可以轻松移植到巢1.0.0,我会建议使用的解决方案.DocumentsWithMetaData ,然后你可以改变到.Hits在升级巢客户端。

如果你真的只关心OpinionDocumentIndexRecord不管你访问过的结果是什么属性,那么你可以使用folllowing之一:

 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;

希望这可以帮助。



文章来源: Retrieve data from elasticsearch results