首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch查询2.7M文档,60 ms。可以吗?可以更快吗?

Elasticsearch查询2.7M文档,60 ms。可以吗?可以更快吗?
EN

Stack Overflow用户
提问于 2016-11-09 08:13:15
回答 1查看 153关注 0票数 0

我有一个带有2.7M文档的索引。这是我的疑问:

代码语言:javascript
复制
GET ad_index/ad_type/_search
{
  "size": 20,
  "sort": {
    "until": "desc"
  },
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "state": 2
          }
        },
        {
          "range": {
            "until": {
              "gte": "now"
            }
          }
        }
      ]
    } 
  },
  "aggs" : {
    "categories": {
      "terms": {
        "field": "category_id",
        "size": 2000
      }
    }
  }
}

此查询没有匹配子查询。我有一个节点,一个碎片和零个副本。

查询时间- 60 ms。没有聚合- 40毫秒。击中~ 50000。

可以吗还是可以更快些?我要10毫秒。我用MySQL可以得到<10毫秒。

我用ES 2.4。索引大小1.34GB。我对分数不感兴趣。

UPD。

我的地图:

代码语言:javascript
复制
{
  "ad_index": {
    "mappings": {
      "ad_type": {
        "properties": {
          "customer_id": {
            "type": "long"
          },
          "deleted": {
            "type": "long"
          },
          "dynamic_fields": {
            "properties": {
              "-icq-3": {
                "type": "string"
              },
              "phone-3": {
                "type": "string"
              }
              "email-3": {
                "type": "string"
              }

              //and 100 more sparse dynamic fields 

          },
          "id": {
            "type": "long"
          },
          "category_id": {
            "type": "long"
          },
          "until": {
            "type": "date",
            "format": "yyyy-MM-dd HH:mm:ss"
          },
          "state": {
            "type": "long"
          },
          "text": {
            "type": "string"
          }
        }
      }
    }
  }
}

其他查询:

代码语言:javascript
复制
GET ad_index/ad_type/_search
{
  "size": 20,
  "sort": {
    "until": "desc"
  },
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "state": 2
          }
        },
        {
          "range": {
            "until": {
              "gte": "now"
            }
          }
        },
        {
          "terms": {
            "category_id" : [1029, 121, ... here can be more than 200 values]
          }
        }
      ]
    } 
  },
  "aggs" : {
    "categories": {
      "terms": {
        "field": "category_id",
        "size": 2000
      }
    }
  }
}

GET ad_index/ad_type/_search
{
  "size": 20,
  "sort": {
    "until": "desc"
  },
  "query": {
    "bool": {
      "must": [
        {
        "match": {
            "_all": "some text"
          }
        }
      ], 
      "filter": [
        {
          "term": {
            "state": 2
          }
        },
        {
          "range": {
            "until": {
              "gte": "now"
            }
          }
        },
        {
          "terms": {
            "category_id" : [1029, 121, ... here can be more than 200 values]
          }
        }
      ]
    } 
  },
  "aggs" : {
    "categories": {
      "terms": {
        "field": "category_id",
        "size": 2000
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 00:54:33

这有点慢,因为您使用的是简单的查询。

  1. 试着用碎片来测试这个数量的文档,尝试3-5个碎片。
  2. 通过设置ES_HEAP_SIZE (https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html),确保允许适当的内存量
  3. 分析您的查询以查看https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-profile.html上发生了什么
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40502434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档