使用random_score的elasticsearch会降低性能

时间:2016-08-02 09:51:18

标签: elasticsearch

当我在查询中使用random_score时,我发现获取查询结果需要大约150毫秒(如果不使用random_score,则需要大约250毫秒才能得到结果)。

原始查询

{
"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"
        }
    }
}

有没有办法优化查询以提高性能?

1 个答案:

答案 0 :(得分:3)

如果要向任何ElasticSearch查询添加更多功能,ES将花费一些处理时间将该功能的分数包含在主分数中,从而增加总时间。 您可以在elasticsearch here中阅读有关随机评分的更多信息。

提高查询性能的最常用方法是使用filters代替query,因为缓存了过滤器。但是如果你的服务器有足够的内存,就应该这样做。

您可以从博客here获得更多想法。