我正在写将弹性搜索中搜索确定的查询字符串的方法,我与几个数据,如突出了结果,命中,比分; 但我只想获取和访问是在文档中的数据,我怎么能做到这一点在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重大更改页面 :
DocumentsWithMetaData
当你做NEST 0.12搜索你会得到一个QueryResponse<T>
有超过你的结果两种方式来循环。 .Documents
是IEnumerable<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;
希望这可以帮助。