如何在Elasticsearch6.8中根据字符串顺序对文档进行排序

时间:2020-02-04 00:32:23

标签: sorting elasticsearch

在Elasticsearch 6.8中,我有以下文档:

{
   ...
   item: 'AAA',
   ...
},
{
   ...
   item: 'BBB',
   ...
},
{
   ...
   item: 'CCC',
   ...
}

在查询请求中,item字段有一个过滤器,如下所示。

"query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "item": [
              "BBB", "CCC"
            ]
          }
        }
      ],
      "should": [
        {
          "match": {
            "name": "Mike"
          }
        }
      ],
      "minimum_should_match": 1
    }

我想要的是根据请求数组中的项目顺序对匹配的文档进行排序。以上面的示例为例,它过滤在BBB字段中有CCCitem的文档。我希望看到BBB的文档比CCC的文档得分更高,因为用户在查询请求中将BBB放在CCC之前。如何在Elasticsearch中实现这一目标?

1 个答案:

答案 0 :(得分:0)

要根据创建日期获得评分,您需要向每个文档添加create_timestamp。 (您可以使用管道来实现。例如:https://discuss.elastic.co/t/creation-and-update-timestamps-for-each-doc/93456/2

一旦有了create_timestamp,就可以使用相同的结果对结果进行排序。方法如下:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html

要使用create_timestamp重新标记文档,可以在日期上使用带有“ field_value_factor”的“ function_score”。 下面是一个示例:https://github.com/elastic/elasticsearch/issues/11872