2015-07-28 61 views
1

我已经有弹性搜索文档和这样的映射。是否可以通过该字段是否符合条件来对elasticsearch查询进行排序?

{ 
    "date_added": { 
     "type": "date", 
     "format": "dateOptionalTime" 
    } 
    "expires": { 
     "type": "date", 
     "format": "dateOptionalTime" 
    } 
} 

我想要做的就是查询双排序:

1)最新到最旧(这是一个简单的排序,在这里没问题)

2)显示文件尚未在最前面到期(所以文件的“过期”比现在更大)

在我的回应中,我希望将文档分为两部分 - 尚未过期的最新到最旧,过期的最新到最旧。

我很努力地创造出可以实现第二部分的排序。我可以按范围过滤器的结果排序吗?也许我可以创建一些属性类似的布尔型字段,它会根据“expires”字段而改变,然后用它进行排序?

回答

1

这看起来像是一个很好的功能评分用例。你可以提到一个函数分数函数来增加文档的有效期限比现在更长。

{ 
    "query": { 
    "function_score": { 
     "filter": [ 
     { 
      "filter": { 
      "range": { 
       "expires": { 
       "gte": "now" 
       } 
      } 
      }, 
      "boost": 1000 
     } 
     ], 
     "score_mode": "sum", 
     "boost_mode": "sum" 
    } 
    } 
} 

您可以阅读更多关于它herehere

+0

这很漂亮。我担心的一件事是它会如何影响我搜索的总体评分(给出的例子非常简单)。我将阅读提供的链接并检查其工作原理。 尽管如何对它进行排序呢?不会将排序与date_sort混为一谈(因为结果之间的分数可能会有所不同)? – user3146472

+0

这不会与排序工作。排序会超过分数并自行排序。如果您想根据辅助字段进行排序,那么您可以在那里再添加一个功能。 –

相关问题