【发布时间】:2019-09-10 05:45:15
【问题描述】:
我需要找出一个标签和另一组固定标签之间的共现时间。我有 10000 个不同的单个标签,并且在固定的标签集中有 10k 个标签。我在固定时间范围的一组固定标签上下文下遍历所有单个标签。我的索引中有 10 亿个文档,包含 20 个分片。
这里是elasticsearch查询,elasticsearch 6.6.0:
es.search(index=index, size=0, body={
"query": {
"bool": {
"filter": [
{"range": {
"created_time": {
"gte": fixed_start_time,
"lte": fixed_end_time,
"format": "yyyy-MM-dd-HH"
}}},
{"term": {"tags": dynamic_single_tag}},
{"terms": {"tags": {
"index" : "fixed_set_tags_list",
"id" : 2,
"type" : "twitter",
"path" : "tag_list"
}}}
]
}
}, "aggs": {
"by_month": {
"date_histogram": {
"field": "created_time",
"interval": "month",
"min_doc_count": 0,
"extended_bounds": {
"min": two_month_start_time,
"max": start_month_start_time}
}}}
})
我的问题:是否有任何解决方案可以在 elasticsearch 中为固定的 10k 组标签术语查询和时间范围过滤器提供缓存,从而加快查询时间?对于我上面的查询,一个标签需要 1.5 秒。
【问题讨论】:
-
我想问你几个澄清问题。参数的可变性如何(
fixed_start_time、fixed_end_time、two_month_start_time、start_month_start_time)?它们是否会随着每个请求(每天、每月)而变化?标签集(从中提取dynamic_single_tag)是否与fixed_set_tags_list相同?您需要多久重复一次此类工作 - 意思是,您想要的性能是多少,计算整个 10K 标签可以花多少时间? -
@Nikolay Vasiliev 我需要每月执行一次 30k 查询。因此,fixed_start_time、fixed_end_time、two_month_start_time、start_month_start_time 将按月更改。 dynamic_single_tag 不在 fixed_set_tags_list 中。在性能方面,我有 30k 个查询,一个查询需要 1.5s,完成它需要 12.5 小时。我希望它能在 30 分钟或 1 小时内完成。
-
我知道我可以添加更多节点,同时,我想知道是否有任何查询优化,例如第一组fixed_set_tags_list的过滤器缓存,在10k dynamic_single_tag查询之后,然后删除缓存,然后为第二组 fixed_set_tags_list 建立另一个过滤器缓存,并继续进行不同的 dynamic_single_tag 查询,依此类推。
标签: performance elasticsearch filter query-cache