【发布时间】:2017-06-27 09:23:57
【问题描述】:
我有一个弹性搜索索引,my_index,包含数百万个文档,键为 my_uuid。在该索引之上,我有几个 filtered aliases 以下形式(仅显示 GET my_index/_alias/my_alias 检索到的 my_alias):
{
"my_index": {
"aliases": {
"my_alias": {
"filter": {
"terms": {
"my_uuid": [
"0944581b-9bf2-49e1-9bd0-4313d2398cf6",
"b6327e90-86f6-42eb-8fde-772397b8e926",
thousands of rows...
]
}
}
}
}
}
}
我的理解是过滤器会为我透明地缓存,无需进行任何配置。问题是我在通过别名时遇到非常缓慢的搜索,这表明 1. 过滤器未缓存,或 2. 写错了。
指示性数字:
GET my_index/_search -> 50ms
GET my_alias/_search -> 8000ms
如果有人认为这相关,我可以提供有关集群规模和数据大小的更多信息。
我使用的是弹性搜索 2.4.1。我得到了正确的结果,这只是我关心的表现。
【问题讨论】:
-
当您直接运行搜索查询并添加应用于别名的过滤器时会发生什么。需要时间吗?
-
您是否检查过
my_uuid是not_analyzed?但是过滤器上的数千个术语似乎很重。如果您在索引时知道这些 uuid,则可以向每个文档添加一个新字段aliases。那么您的过滤器将只有一个术语。 -
@NikoNyrh
my_uuid是not_analyzed。事实上,我在索引时就知道它们,但它们是批量动态更新的,所以我不想将它们硬编码到可搜索的文档中。 -
嗨@pratikvasa。我进行了测试并得到了相似的时间。问题是,由于
my_uuids 的数量,我在不使用过滤器的别名时必须发送的查询大约为 4MB,并且仅上传查询大约需要 6 秒。所以我想这不是一个可行的解决方案。 -
ohk..通过类似的时间你的意思是你得到大约 8 秒,其中包括 6 秒发送查询?
标签: performance search elasticsearch