我正在优化搜索查询的性能,并且正在遵循https://www.elastic.co/guide/en/elasticsearch/reference/7.7/tune-for-search-speed.html的建议
查询执行以下操作:
建议的最便宜的优化方法之一是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"
}
}
}
这些都是来自具有5M文档的单节点群集的测试。从慢查询日志中获取查询。