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過程有了更好的理解 –