2
当我在查询中使用random_score时,我发现获取查询结果花费大约150多毫秒(如果不使用random_score,大约需要250毫秒才能得到结果)。elasticsearch使用random_score会降低性能
原始查询
{
"size": 10,
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"sound_title",
"album_title"
],
"query": "0"
}
}
]
}
},
"functions": [
{
"filter": {
"bool": {
"must": [
{
"term": {
"sound_chapters": 1
}
}
]
}
},
"weight": 1.2
},
{
"field_value_factor": {
"field": "album_playcount",
"modifier": "log",
"missing": "100"
}
}
],
"score_mode": "sum"
}
}
}
查询与random_score
{
"size": 10,
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"sound_title",
"album_title"
],
"query": "0"
}
}
]
}
},
"functions": [
{
"filter": {
"bool": {
"must": [
{
"term": {
"sound_chapters": 1
}
}
]
}
},
"weight": 1.2
},
{
"field_value_factor": {
"field": "album_playcount",
"modifier": "log",
"missing": "100"
}
},
{
"random_score": {
"seed": "123"
}
}
],
"score_mode": "sum"
}
}
}
还有什么办法优化查询,以提高更好的性能?
thx,但我只是不明白为什么性能可以减少很多(从约250毫秒到约400毫秒)。我的理解是,random_score只会将0到1之间的随机分数添加到主要分数中,并且一般来说,生成随机数并不是一个耗时的过程,因此只需要更多的时间将random_score函数分数包含到主要得分。 –
@ThidtcWh这是因为随机评分不是纯粹随机的。它是“持续随机”评分,这意味着对于同一用户,您将获得相同的随机分数,这种类型的活动将需要时间来存储和获取每个用户的数据。我在回答中添加了随机得分的链接,您应该阅读一次,至少可以更好地理解'种子'的使用。' –
非常感谢您的耐心回答,现在我对random_score过程有了更好的理解 –