我正在尝试对弹性搜索进行查询,但由于响应非常慢,我感到很惊讶。
request = {
"query": {
"bool": {
"must": [{"match": {"user.id": self.id}}]
}
},
"sort": [
{"created_at": {"order": "asc"}}
]
}
查询需要3秒半(3.5秒)才能得到响应。我在当地工作,所以问题不能来自网络问题。
如果知道查询命中了包含40万个文档的索引,我怎样才能提高查询速度?
答案 0 :(得分:1)
假设您使用的是默认设置,则使用的是标准分析器
实际查询前match query会将相同的标准分析器应用于搜索词。它还将计算匹配文档的分数,这也会对查询性能产生一些影响。
term query不会将任何分析器应用于搜索字词,因此只会在倒排索引中查找该确切字词。
现在,是否计算得分取决于query-filter-context
查询背景
查询上下文中使用的查询子句回答了问题“如何 这个文档是否符合这个查询条款?“除了决定是否 或者文档是否匹配,查询子句还计算_score 表示文档相对于其他文档的匹配程度 文档。
过滤背景
在过滤器上下文中,查询子句回答问题“这是否 文档匹配此查询子句?“答案是简单的是或 否 - 没有计算分数。
Elasticsearch会自动缓存经常使用的过滤器, 加快表现。
您可以按照以下说明创建查询:
GET _search
{
"query": {
"bool": {
"must": [
{ "match_all": {}}
],
"filter": [
{ "term": { "user.id": <YOUR_ID_PARAM> }},
]
},
"sort" :{.....}
}
}