ElasticSearch – 当查询 1,000 个条件时它如何执行

ElasticSearch – How Does It Perform When Queried With 1,000 Conditions

我需要能够在查询的一组用户 ID 中搜索具有任何用户 ID 的记录。

但是,随着时间的推移,必须搜索的用户 ID 数量将大幅增加。因此,我必须能够将数千个用户 ID 添加到单个查询中并搜索所有用户 ID。

我正在考虑通过像盆景这样的托管服务使用 ElasticSearch。

ElasticSearch 在查询数千个条件时表现如何?

答案取决于很多因素(服务器数量、RAM、CPU 等),可能需要进行一些实验才能找出最适合您的方法。我相信 Elasticsearch 可以解决您的问题,但总体上很难预测性能。

您可能想要调查 terms lookup。基本上,您将要搜索的所有术语存储在索引(或另一个)的文档中,然后您可以在搜索中引用该列表。

因此您可以将要搜索的 ID 保存为

PUT /test_index/idlist/1
{
    "ids" : [2,1982,939,1982,98716,7611,983838,...]
}

然后您可以使用该列表搜索另一种类型,例如,使用顶级过滤器:

POST /test_index/doc/_search
{
   "filter": {
      "terms": {
         "id": {
            "index": "test_index",
            "type": "idlist",
            "id": "1",
            "path": "ids"
         }
      }
   }
}

这可能只有在您要多次 运行 同一个查询时才有意义。不过,您可以拥有多个 ID 列表,如果有帮助,还可以为包含列表的文档提供描述性 ID。

使用托管服务可以轻松试验不同的集群设置(节点数量、机器大小、数据中心等)。我建议您看一下 Qbox(我有偏见,因为我使用 Qbox)。新客户可获得 40 美元的介绍信用,这通常足以进行概念验证试验。