Elasticsearch脚本分数对搜索性能的影响

时间:2020-06-26 15:30:11

标签: elasticsearch

我正在优化搜索查询的性能,并且正在遵循https://www.elastic.co/guide/en/elasticsearch/reference/7.7/tune-for-search-speed.html的建议

查询执行以下操作:

  • 按多个日期字段过滤
  • (可选)按category_ids过滤
  • 包裹在一个功能分数中,其中一个功能是脚本分数

建议的最便宜的优化方法之一是rounding dates,以改善查询缓存。我已将应用程序级别的时间缩短至几分钟。

另一个便宜的优化方法是映射identifiers as keywords

我都尝试过,但都没有显着改变。我观察到应用程序性能指标,查询慢日志,差异可以忽略不计。

将标识符映射为关键字的过程变得更慢,但是我还进行了一次测试,删除了所有功能,重新运行了所有查询,关键字标识符的性能优于数字标识符。

同一篇文章建议避免使用脚本,接下来我将做

鉴于关键字标识符比不带函数的数字标识符要好,而对函数的效果却很差,这种情况令人怀疑,我无法解释。

那么脚本分数(function_score)以什么方式影响其他查询的性能?

这是经过修剪的查询版本:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": [
            {
              "range": {
                "created_at": {
                  "gte": "2020-06-26T17:22:00"
                }
              }
            },
            {
              "terms": {
                "catalog_ids": [4, 178, 222, 532, 1078, 1131]
              }
            }
          ]
        }
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "1 / ln(now - doc['created_at'].value + 1)",
              "lang": "expression",
              "params": { "now": 1593184920000 }
            }
          }
        },
        {
          "filter": {
            "range": {
              "boost_until": {
                "gte": "2020-06-26T17:22:00"
              }
            }
          },
          "weight": 15.15
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "sum"
    }
  }
}

具有/不具有功能分数的查询持续时间差异: With function score Without function score

这些都是来自具有5M文档的单节点群集的测试。从慢查询日志中获取查询。

0 个答案:

没有答案