elasticsearch 如何从Elasticsearch响应读取距离,elasticsearch,nest,elasticsearch.net,elasticsearch,Nest,Elasticsearch.net" /> elasticsearch 如何从Elasticsearch响应读取距离,elasticsearch,nest,elasticsearch.net,elasticsearch,Nest,Elasticsearch.net" />

elasticsearch 如何从Elasticsearch响应读取距离

elasticsearch 如何从Elasticsearch响应读取距离,elasticsearch,nest,elasticsearch.net,elasticsearch,Nest,Elasticsearch.net,我使用的是ElasticSearchV6,NEST V6 我正在如下搜索ES,我正在使用ScriptFields计算距离并将其包含在结果中 var searchResponse = _elasticClient.Search<MyDocument>(new SearchRequest<MyDocument> { Query = new BoolQuery { Must = new QueryContainer[] { matchQuery

我使用的是ElasticSearchV6,NEST V6

我正在如下搜索ES,我正在使用ScriptFields计算距离并将其包含在结果中

var searchResponse = _elasticClient.Search<MyDocument>(new SearchRequest<MyDocument>
{
    Query = new BoolQuery
    {
        Must = new QueryContainer[] { matchQuery },
        Filter = new QueryContainer[] { filterQuery },
    },
    Source = new SourceFilter
    {
        Includes = resultFields    // fields to be included in the result
    },
    ScriptFields = new ScriptField
    {
        Script = new InlineScript("doc['geoLocation'].planeDistance(params.lat, params.lng) * 0.001")   // divide by 1000 to convert to km
        {
            Lang = "painless",
            Params = new FluentDictionary<string, object>
            {
                { "lat", _center.Latitude },
                { "lng", _center.Longitude }
            }
        }
    }
});
var searchResponse=\u elasticClient.Search(新的SearchRequest
{
Query=newboolquery
{
必须=新的QueryContainer[]{matchQuery},
Filter=new QueryContainer[]{filterQuery},
},
Source=新的SourceFilter
{
Includes=resultFields//要包含在结果中的字段
},
ScriptFields=新建ScriptField
{
Script=new InlineScript(“doc['geoLocation'].planeDistance(params.lat,params.lng)*0.001”)//除以1000转换为km
{
Lang=“无痛”,
Params=新的FluentDictionary
{
{“纬度”{u中心纬度},
{“lng”,_center.Longitude}
}
}
}
});
现在,我正在尝试读取搜索结果,但我不确定如何读取与响应的距离,这是我尝试过的:

// this is how I read the Document, all OK here
var docs = searchResponse.Documents.ToList<MyDocument>();

// this is my attempt to read the distance from the result
var hits = searchResponse.Hits;
foreach (var h in hits)
{
    var d = h.Fields["distance"];
    // d is of type Nest.LazyDocument 
    // I am not sure how to get the distance value from object of type LazyDocument
}                                  
//这是我阅读文档的方式,在这里一切正常
var docs=searchResponse.Documents.ToList();
//这是我试图从结果中读出的距离
var hits=searchResponse.hits;
foreach(点击中的var h)
{
var d=h.字段[“距离”];
//d是Nest.LazyDocument类型
//我不确定如何从LazyDocument类型的对象获取距离值
}                                  
调试时,我可以看到距离值,但我不知道如何读取该值

我找到了答案

要阅读搜索文档和距离,请执行以下操作:

foreach (var hit in searchResponse.Hits)
{
    MyDocument doc = hit.Source;    
    double distance = hit.Fields.Value<double>("distance");  
}
foreach (var fieldValues in searchResponse.Fields)
{
    var distance = fieldValues.Value<double>("distance");
}
foreach(searchResponse.Hits中的var hit)
{
MyDocument doc=hit.Source;
双距离=命中字段值(“距离”);
}
如果你只对距离感兴趣:

foreach (var hit in searchResponse.Hits)
{
    MyDocument doc = hit.Source;    
    double distance = hit.Fields.Value<double>("distance");  
}
foreach (var fieldValues in searchResponse.Fields)
{
    var distance = fieldValues.Value<double>("distance");
}
foreach(searchResponse.Fields中的变量字段值)
{
var距离=字段值。值(“距离”);
}
我找到了答案

要阅读搜索文档和距离,请执行以下操作:

foreach (var hit in searchResponse.Hits)
{
    MyDocument doc = hit.Source;    
    double distance = hit.Fields.Value<double>("distance");  
}
foreach (var fieldValues in searchResponse.Fields)
{
    var distance = fieldValues.Value<double>("distance");
}
foreach(searchResponse.Hits中的var hit)
{
MyDocument doc=hit.Source;
双距离=命中字段值(“距离”);
}
如果你只对距离感兴趣:

foreach (var hit in searchResponse.Hits)
{
    MyDocument doc = hit.Source;    
    double distance = hit.Fields.Value<double>("distance");  
}
foreach (var fieldValues in searchResponse.Fields)
{
    var distance = fieldValues.Value<double>("distance");
}
foreach(searchResponse.Fields中的变量字段值)
{
var距离=字段值。值(“距离”);
}

更新存储字段的文档以指向您链接的文档。立即生效:更新存储字段的文档以指向您链接的文档。立即生效: