我们设置了7个节点的elasticsearch集群。每个节点都具有16G RAM, 8 Core cpu, centos 6
。
Elasticsearch版本: 1.3.0
堆内存是 - 9000m
1 Master (Non data)
1 Capable master (Non data)
5 Data node
有10个索引,其中一个索引有5500万个文档[254Gi(508Gi with replica)]大小,所有索引都有大约20k文档。
每1秒就有5-10个新文档正在编制索引。
但问题是搜索有点慢。几乎平均为2000 ms
到5000 ms
。有些查询是在1秒内完成的。
{
"my_index": {
"mappings": {
"product": {
"_id": {
"path": "product_refer_id"
},
"properties": {
"product_refer_id": {
"type": "string"
},
"body": {
"type": "string"
},
"cat": {
"type": "string"
},
"cat_score": {
"type": "float"
},
"compliant": {
"type": "string"
},
"created": {
"type": "integer"
},
"facets": {
"properties": {
"ItemsPerCategoryCount": {
"properties": {
"terms": {
"properties": {
"field": {
"type": "string"
},
"size": {
"type": "long"
}
}
}
}
}
}
},
"fields": {
"type": "string"
},
"from": {
"type": "string"
}
"id": {
"type": "string"
},
"image": {
"type": "string"
},
"lang": {
"type": "string"
},
"main_cat": {
"properties": {
"Technology": {
"type": "double"
}
}
},
"md5_product": {
"type": "string"
},
"post_created": {
"type": "long"
},
"query": {
"properties": {
"bool": {
"properties": {
"must": {
"properties": {
"query_string": {
"properties": {
"default_field": {
"type": "string"
},
"query": {
"type": "string"
}
}
},
"range": {
"properties": {
"main_cat.Technology": {
"properties": {
"gte": {
"type": "string"
}
}
},
"sub_cat.Technology.computers": {
"properties": {
"gte": {
"type": "string"
}
}
}
}
},
"term": {
"properties": {
"product.secondary_cat": {
"type": "string"
}
}
}
}
}
}
},
"match_all": {
"type": "object"
}
}
},
"secondary_cat": {
"type": "string"
},
"secondary_cat_score": {
"type": "float"
},
"size": {
"type": "long"
},
"sort": {
"properties": {
"_uid": {
"type": "string"
}
}
},
"sub_cat": {
"properties": {
"Technology": {
"properties": {
"audio": {
"type": "double"
},
"computers": {
"type": "double"
},
"gadgets": {
"type": "double"
},
"geekchic": {
"type": "double"
}
}
}
}
},
"title": {
"type": "string"
},
"product": {
"type": "string"
}
}
}
}
}
}
我们正在使用Default Analyzer
有什么建议吗?这种配置是不够的?
答案 0 :(得分:1)
看起来索引无法适应内存,因此会有更多的磁盘I / O在进行。你使用固态硬盘吗?如果没有,你应该得到一些。
除此之外,您的节点需要更多资源(内存,CPU)来处理索引大小。
我对这里的尺寸感到有些惊讶:约为250 GB"只是" 5500万个文档很庞大,我也没有看到你在那里存储任何更大的blob(我可能会错,很难从映射定义中看到它)。也许您可以考虑保留一些未分析的数据,以防您不需要查询,但只需检索它。这会减少索引大小。
除此之外,我没有其他想法,没有更详细地了解所有相关基础设施。
答案 1 :(得分:1)
要添加到Torsten Engelbrecht的答案,默认分析器可能是罪魁祸首的一部分。该分析器将每个单词的每个形式编入索引作为单独的标记,这意味着具有复杂共轭的语言中的单个动词可以被索引十几次。此外,这会降低搜索结果的质量。如果您的文档包含格式信息(HTML标记?),则同样适用。
更多,stop words are disabled by default,意味着每个""," a" ...例如英文也将被编入索引。
您应该考虑使用本地化分析器(可能是雪球分析仪吗?)并停止使用文档中使用的语言来限制反向索引大小,这样就可以提高性能。
另外,请考虑将not_analyzed
字段设为md5,url,id和其他类型的不可搜索字段。