加强查询弹性搜索

时间:2017-03-26 08:34:33

标签: python python-3.x elasticsearch

我正在尝试对弹性搜索进行查询,但由于响应非常慢,我感到很惊讶。

request = {
            "query": {
                "bool": {
                    "must": [{"match": {"user.id": self.id}}]
                }
            },
            "sort": [
                {"created_at": {"order": "asc"}}
            ]
        }

查询需要3秒半(3.5秒)才能得到响应。我在当地工作,所以问题不能来自网络问题。

如果知道查询命中了包含40万个文档的索引,我怎样才能提高查询速度?

1 个答案:

答案 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" :{.....}
  }
}