Elasticsearch -按匹配字段排序,然后按日期排序

xlpyo6sf  于 2023-05-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(227)

我按以下顺序对Elasticsearch结果进行排序:
1.具有匹配tag的帖子;
1.具有匹配title的帖子;
1.具有匹配category的帖子;
1.匹配content的帖子;
我已经使用function_score实现了这一点,它根据匹配字段增加分数:

{
  function_score: {
    query: {
      bool: {
        should: [
        {
          match: {
            'insightsTag.title': {
              query: this.queryString,
              boost: 4
            }
          }
        },
        {
          match: {
            title: {
              query: this.queryString,
              boost: 3
            }
          }
        },
        {
          match: {
            'insightsCategory.title': {
              query: this.queryString,
              boost: 2
            }
          }
        },
        {
          match: {
            content: {
              query: this.queryString
            }
          }
        },
        ],
        must: [typeFilter]
      }
    },
    boost_mode: 'sum'
  }
}

如何按日期对每个匹配组进行排序?即显示所有帖子与匹配的标签,按日期排序;然后,显示所有具有匹配标题的帖子,也按日期排序;等等

xam8gpfp

xam8gpfp1#

Tldr

函数查询允许您计算自定义分数。
默认情况下,文档将按其分数排序。但是你可以choose how you want to sort那些文件。

溶液

这将首先按分数排序,然后按日期排序(按时间顺序)

{
  "sort" : [
    "_score",
    { "@timestamp" : {"order" : "asc"}}
  ],
  "query" : {
    ... Your query ...
  }
}

相关问题