Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
C# ElasticSearch NEST-按特定范围内的日期列表排序_C#_Sorting_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,Sorting,elasticsearch,Nest" /> elasticsearch,nest,C#,Sorting,elasticsearch,Nest" />

C# ElasticSearch NEST-按特定范围内的日期列表排序

C# ElasticSearch NEST-按特定范围内的日期列表排序,c#,sorting,elasticsearch,nest,C#,Sorting,elasticsearch,Nest,我在弹性搜索中有一些文档,映射如下(简化) 现在-我正在根据materialDates字段(实际上是索引上的日期列表)的日期范围进行查询以获得结果-一切正常。我无法根据列表日期中的匹配结果对结果进行排序,例如: 范围查询:2014年7月7日-2014年7月14日 样本文档 { orderTrades: [ { materialDates: [3/13/2013, 7/10/2014, 8/10/2014] }, {

我在弹性搜索中有一些文档,映射如下(简化)

现在-我正在根据
materialDates
字段(实际上是索引上的日期列表)的日期范围进行查询以获得结果-一切正常。我无法根据列表日期中的匹配结果对结果进行排序,例如:

范围查询:2014年7月7日-2014年7月14日

样本文档

{
    orderTrades: [
        {
            materialDates: [3/13/2013, 7/10/2014, 8/10/2014]
        },
        {
            materialDates: [7/9/2014, 8/15/2014]
        }
    ]
}
两个文档都匹配范围过滤器,但在升序排序时,第二个对象应排在第一位,但排序时会考虑
3/13/2013
值,因此排在第一位。有没有办法只对匹配的数组值进行排序?我正在使用的当前嵌套:

query.Sort(
    x => x.OnField(j => j.OrderTrades.Select(z => z.MaterialDates))
        .NestedPath(h => h.OrderTrades)
        .NestedFilter(q => q.Range(
           v => v.OnField("orderTrades.materialDates").From(fromRange).To(toRange)
        ))
        .ToggleSort(true)
);

也限制为弹性0.9。谢谢您的建议-如果您的示例中需要更多信息,请告诉我您有一个orderTrades文档,其中包含两个嵌套的MaterialDate。ES不会对单个orderTrades文档中的物料日期进行排序。在ES中对结果进行排序时,它会对整个orderTrades文档的返回顺序进行排序


我认为,如果您使用的是ES 1.x,您可能可以使用嵌套查询来执行您想要的操作,但这在0.9中不受支持,这是一个棘手的要求,因为您要求的行为是不明确的,因为您试图对数组值进行排序。我认为您希望它按照查询范围内数组中的最小值进行排序。然而,这是假设一个升序排序;您希望对最大值进行降序排序吗

从各方面考虑,这是一个足够具体的要求,我认为没有一个简单的方法,但你可以用一个简单的方法来实现这一点。脚本必须复制查询范围,并根据排序顺序将范围之外的任何值替换为真正低或真正高的值。 脚本非常强大,因为您可以使用Groovy,而且脚本非常好

话虽如此,脚本排序文档中的注释是一个有趣的注释:

注意,对于基于单个自定义脚本的排序,建议使用函数_score query,因为基于分数的排序更快


您没有说明是否在查询中使用了评分,但如果没有,您可以使用类似的脚本来实现排序要求。

是的-我使用了一个包含更具体数据的子文档-尝试了一些脚本排序,但没有成功。感谢您的输入(很抱歉没有反馈,很忙),您的源代码缺少查询声明,因此我无法复制。什么是查询?
query.Sort(
    x => x.OnField(j => j.OrderTrades.Select(z => z.MaterialDates))
        .NestedPath(h => h.OrderTrades)
        .NestedFilter(q => q.Range(
           v => v.OnField("orderTrades.materialDates").From(fromRange).To(toRange)
        ))
        .ToggleSort(true)
);