【问题标题】:Elasticsearch sort by field existanceElasticsearch 按字段存在排序
【发布时间】:2016-06-21 23:03:33
【问题描述】:

我想按字段存在对我的 ES 搜索结果进行排序, 假设我有“价格”字段,并希望所有有价格的结果都在顶部,而所有没有价格的结果都在底部。 我知道你可以做一个简单的排序并添加 "missing": "_last" 例如:

{"sort" : [{'price': {'missing': '_last', 'order': 'asc'}}]}

但在这种情况下,结果也会按价格排序,我不想要它。

有没有不用脚本的方法?

【问题讨论】:

  • 您可以发布您尝试过的查询吗?
  • @keety 我在描述中添加了带有“缺失”参数的过滤器示例

标签: sorting elasticsearch


【解决方案1】:

可以使用function score 来实现这一点。
这将涉及使用weight 来减少不包含特定字段的文档的分数。

例子:

{
   "query": {
      "function_score": {
         "functions": [
            {
               "weight": 0.5,
               "filter": {
                  "missing": {
                     "field": "price"
                  }
               }
            }
         ],
         "query": {
            "match_all": {}
         }
      }
   }
}

以上内容会导致带有字段价格的文档显示得更高。

【讨论】:

  • 谢谢,但就速度而言,它和脚本一样吗?
  • 因为我们使用内置函数来进行函数评分,所以我猜它比脚本快,但我没有与等效脚本进行比较。实施。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2021-01-30
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多