【发布时间】:2020-06-24 16:11:58
【问题描述】:
我有一张大桌子(15000 x 2000 个条目)。在此表中,我需要计算具有某些属性的行,例如“所有行,在第 5 列中具有 1 或 2,在第 6 列中具有 0”。我将这种类型的操作称为计数操作。对于我的用例,计数操作需要非常快,因为我执行了数百个计数操作。
我尝试使用弹性搜索来执行此操作,但性能似乎非常糟糕(例如 180 次计数操作需要 10 秒)。我想知道,我是否以错误的方式构建查询,或者 Elasticsearch 是否是错误的技术?
我的查询都是相同的形式。我用java创建它们,所以很难在这里发布它们的样子,但我会尽力解释
我将每个单独的计数操作构建为 BoolQuery。对于上面的示例,它将是一个类似于此的查询(如果它错了不要怪我,我无法复制正确的查询,因为它是用 java 构建的):
"query": {
"bool" : {
"must" : [
"should" : [
{ "column 5" : "1" },
{ "column 5" : "2" }
],
"should" : [
{ "column 6" : "0" }
],
"minimum_should_match" : 1
],
"boost" : 1.0
}
}
这种形式的许多 bool 查询然后被分组到一个 MultiSearchRequest。我使用“fetchSource = false”选项来阻止 Elasticsearch 自己加载实体。
如果您需要任何进一步的信息,或者不清楚,请告诉我,我想做什么!
【问题讨论】:
-
180 次计数操作是什么意思?都被索引了吗?你在做什么样的计数?它非常不清楚。在你的 java 部分解释中,你不是 syaung 你是如何执行每个计数的。
-
感谢您的提示,我试图更清楚地重新表述它!如果您还有任何问题,请告诉我!
-
有多少个分片?您要查询多少个索引?节点上的资源容量是多少?有多少个节点?等等。
标签: elasticsearch