php - Elasticsearch:多个小查询与一个更大的查询 - 效率?
问题描述
在 php 循环中执行多个单个查询或将所有内容保存在一个数组中并为弹性构建一个更大的查询是否更有效?
选项1:
foreach ($rowset as $row) {
//execute query:
"query": {
"bool" : {
"must" : [
{"term" : { "a" : "'.$row['a'].'" }},
{"term" : { "b" : "'.$row['b'].'" }}
]
}
}
}
选项 2:
$search = "";
foreach ($rowset as $key => $row) {
if($key > 0) {
$search .= ',';
}
$search .= '"must" : [
{"term" : { "a" : "'.$row['a'].'" }},
{"term" : { "b" : "'.$row['b'].'" }}
]'
}
"query": {
"bool" : {
"should" : [
"must" : [
'.$search.'
]
]
}
}
在这个最小示例中,语法可能不正确,但我希望这个想法变得清晰。我希望选项 2 更快。我还没有测试它,因为我现在有多个嵌套循环并且在我重写我的代码之前想要一个选项。
解决方案
外部资源请求总是很慢。所以最好创建单个请求。外部数据库将以相同的速度处理它,但您将节省请求时间。
另一方面,您可以获得如此大的查询,以至于您的客户端(例如浏览器)将超时,或者您无法将所有内容都放入内存进行处理。
使用具有合理数据量的单个查询。
推荐阅读
- angular - 在 Angular 中,我应该在哪里存储用户对象,以便在导航设置中引用它以获取可用性?
- javascript - 使用 Context API 与 CloneElement 为直接后代传递道具
- android - 添加evernote库得到Manifest merge failed com.android.support:support-compat:28.0.0
- apache-kafka - Confluent - 如何使用外部 Zookeeper 而不是嵌入式 Zookeeper
- swift - Swift - 线程 1:致命错误:索引超出范围错误问题
- mysql - GROUP BY 仅当列不为空/空时
- react-native - 使用navigation.goBack()时如何将数据发送回上一个屏幕?
- android - Android - 使用权限在特定路径中下载和保存文件
- c# - 使用 C# for webhooks 以 JSON 形式获取内容类型为 x-www-form-urlencoded 的请求消息
- flurry - “com.flurry.OTHER”是什么意思