Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch elasticsearch NEST:不使用bucket直接获取TopHits结果。TopHits()_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch elasticsearch NEST:不使用bucket直接获取TopHits结果。TopHits(),elasticsearch,nest,elasticsearch,Nest" /> elasticsearch elasticsearch NEST:不使用bucket直接获取TopHits结果。TopHits(),elasticsearch,nest,elasticsearch,Nest" />

elasticsearch elasticsearch NEST:不使用bucket直接获取TopHits结果。TopHits()

elasticsearch elasticsearch NEST:不使用bucket直接获取TopHits结果。TopHits(),elasticsearch,nest,elasticsearch,Nest,我正在用nest做一个术语聚合 我也在做一个内部TopHits聚合 我的结果为我提供了响应对象中的所有结果信息,除了TopHits值,我可以通过TopHits()方法读取这些值 我希望在结果中直接使用tophits值,而不使用NEST tophits()methode读取aggs。我想在信息的所有数据,因为我们在弹性搜索经典的要求 这就是我实际上正在做的: 我的聚合请求: var response = Client.Search<myclass>(s => s

我正在用nest做一个术语聚合

我也在做一个内部TopHits聚合

我的结果为我提供了响应对象中的所有结果信息,除了TopHits值,我可以通过TopHits()方法读取这些值

我希望在结果中直接使用tophits值,而不使用NEST tophits()methode读取aggs。我想在信息的所有数据,因为我们在弹性搜索经典的要求

这就是我实际上正在做的:

我的聚合请求:

 var response = Client.Search<myclass>(s => s
                                     .Type("type")
                                      .Aggregations(a => a
                                        .Terms("code_bucket", t => t
                                         .Field("field_of_aggregation")
                                         .Size(30)
                                         .Order(TermsOrder.CountAscending)
                                         .Aggregations(a2 => a2
                                         .TopHits("code_bucket_top_hits", th => th.Size(20))
                                       )
                                       )));
json不包含topHits结果:

我可以访问值,但我需要使用嵌套方法TopHits():

var firstBucket=response.Aggs.Terms(“code_bucket”);
foreach(firstBucket.bucket中的var bucket)
{
var hits=bucket.TopHits(“代码+bucket\u top\u hits”);
foreach(hits.Documents()中的var hit)
{
var prop1=hit.prop1;
var prop2=hit.prop2;
}
}
}
但如果我能把所有的信息都集中在一个网站上,就像我们在没有nest的情况下执行elasticsearch请求一样,这将是非常有用的


你知道有没有办法吗?

NEST是Elasticsearch之上的一种更高层次的抽象,它使用强类型对每个请求和响应进行建模,提供流畅的和对象初始化器语法来构建请求,以及访问响应部分的方法,而无需自己处理JSON序列化

然而,有时候,你可能想自己处理这个问题,这听起来是你想要做的。在这些情况下,可以使用Elasticsearch.Net,它是Elasticsearch的低级别客户端,在您如何对请求和响应进行建模方面不受限制

您可以在Elasticsearch.Net中使用客户端而不是NEST,但是,好消息是NEST在幕后使用Elasticsearch.Net,并且还通过
IElasticClient
上的
.LowLevel
属性公开低级客户端。为什么要在NEST上使用低级客户端,而不是直接使用Elasticsearch.Net?这样做的一个主要原因是,您可以在需要时利用请求和响应的强类型,并利用NEST对Json.NET的使用进行序列化,但可以在需要时绕过它并使用低级客户端进行调用

这里有一个例子

var client = new ElasticClient();

var searchRequest = new SearchRequest<Question>
{
    Size = 0,
    Aggregations = new TermsAggregation("top_tags")
    {
        Field = "tags",
        Size = 30,
        Order = new[] { TermsOrder.CountAscending },
        Aggregations = new TopHitsAggregation("top_tag_hits")
        {
            Size = 20
        }
    }
};

var searchResponse = client.LowLevel.Search<JObject>("posts", "question", searchRequest);

// this will be of type JObject. Do something with it
searchResponse.Body
返回字符串,或

var searchResponse = client.LowLevel.Search<Stream>("posts", "question", searchRequest);
var searchResponse=client.LowLevel.Search(“帖子”、“问题”、搜索请求);

返回流等。

很难理解您的问题:您是否可以使用
bucket.TopHits()
访问的
top\u hits
聚合来获取每个术语bucket中的文档?您是否在询问是否可以在不使用
bucket.TopHits()
的情况下以其他方式检索它们?是的,我希望在不使用任何方法或短路径的情况下检索所有结果。手动构造Answare并不方便,我希望在执行elasticsearch请求时拥有所有结果数据
var client = new ElasticClient();

var searchRequest = new SearchRequest<Question>
{
    Size = 0,
    Aggregations = new TermsAggregation("top_tags")
    {
        Field = "tags",
        Size = 30,
        Order = new[] { TermsOrder.CountAscending },
        Aggregations = new TopHitsAggregation("top_tag_hits")
        {
            Size = 20
        }
    }
};

var searchResponse = client.LowLevel.Search<JObject>("posts", "question", searchRequest);

// this will be of type JObject. Do something with it
searchResponse.Body
var searchResponse = client.LowLevel.Search<string>("posts", "question", searchRequest);
var searchResponse = client.LowLevel.Search<Stream>("posts", "question", searchRequest);