Elasticsearch 脚本排序耗时太长

Elasticsearch Script sort taking too long

我正在使用脚本对 Elasticsearch 返回的结果(或匹配项)进行排序。

查询看起来像这样。

GET trademark7/_search
{
  "size" :20,
  "track_scores": true,
    "stored_fields": [
      "_source"
      ],
    "sort": {
      "_script":{
        "type" : "number",
        "script" : {
          "id": "algo_for_sorting",
          "params":{
            "query":"linkedin"
          }
        },
        "order" : "desc"
      }
    },
    "query" : {
      "bool": {
        "should": [
          {
            "match": {
              "tm_applied_for_phonetic": {
                "query": "linkedin"
              }
            }
          },
          {
            "match": {
              "tm_applied_for_anan" : {
                 "query" : "linkedin"
              }
            }
          }
        ]
      }
    }
}

问题是:-

只要我使用字段 tm_applied_for_anan 来匹配文档。它 returns 我得到了很多结果(或匹配项),因为它是使用 Anangram 标记化的,并且需要很长时间(5 分钟)才能显示结果。

原因可能是:-

1)无痛脚本运行慢。

2) 我使用的算法很慢。 (我不能改变它,这个算法是某个政府什么的,我不知道。)

3) Elasticsearch 必须将这种缓慢的算法应用于所有结果(比如 400,000 个)以计算分数并对它们进行排序。

要解决上述问题,我想做的是

1) 让 Elasticsearch 给我使用 Term FrequencyInverse Term Frequency 计算得分的结果以及所有这些好东西,这真的非常快。

2) 我将对少量结果(比如前 10,000 个)应用较慢的算法,然后再次对结果进行排序。

我的问题是 "Is there a way i can apply Re-Scoring and Re-Sorting for only a small chunk of the results returned by Elasticsearch inside Elasticsearch?" 如果不是,请给我一些想法或您的想法!

如果您不在排序脚本中使用 _score,您可以使用过滤器,其结果缓存在 elasticsearch

所以请尝试以下查询并告诉我:

GET trademark7/_search
{
    "size": 20,
    "track_scores": true,
    "stored_fields": [
        "_source"
    ],
    "sort": {
        "_script": {
            "type": "number",
            "script": {
                "id": "algo_for_sorting",
                "params": {
                    "query": "linkedin"
                }
            },
            "order": "desc"
        }
    },
    "query": {
        "bool": {
            "filter": [
                {
                    "multi_match": {
                        "query": "linkedin",
                        "fields": [
                            "tm_applied_for_phonetic",
                            "tm_applied_for_anan"
                        ]
                    }
                }
            ]
        }
    }
}