我有一个2.7M文档的索引。有我的疑问:
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
}
}
}
}
此查询没有匹配子查询。 我有1个节点,1个分片和0个副本。
查询时间 - 60毫秒。没有聚合 - 40毫秒。 点击数~50000。
可以,还是可以更快?我想要10毫秒。我得到了< 10ms的MySQL。
我使用ES 2.4。索引大小1.34 GB。我对得分不感兴趣。
UPD。
我的映射:
{
"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"
}
}
}
}
}
}
其他查询:
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
}
}
}
}
答案 0 :(得分:1)
它有点慢,因为你使用的是简单的查询。