我有一个包含10,000,000个文档的索引。 Elasticsearch配置为使用5个分片,没有副本。
每个文档都有两个字段:
tags
,包含三个标记。我的索引中目前有82个用户定义的标签。singleTag
,仅包含同一组82个可能值中的一个标记。 (此字段仅用于比较)我想查询前十个标签(按字母顺序排列)。字段tags
大约需要300毫秒(字段singleTag
只需要150毫秒)。如何提高此查询的性能?
示例文档:
{
"tags": ["player", "ballsports", "goals"],
"singleTag": "football"
}
我的索引定义:
{
"settings": {
"number_of_shards": "5",
"number_of_replicas": "0"
},
"mappings" : {
"issue": {
"properties": {
"tags": {
"index": "not_analyzed",
"type": "string"
},
"singleTag": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
当前(太慢)查询:
{
"size" : 0,
"aggregations" : {
"tagsAggregation" : {
"terms" : {
"field" : "tags",
"size" : 10,
"order" : {
"_term" : "asc"
}
}
}
}
}
我目前正在使用Elasticsearch 2.4.4,但也欢迎包括Elasticsearch 5在内的解决方案。 Elasticsearch 5中的性能与第一个请求类似,但缓存要好得多。