首页 > 解决方案 > 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 更快。我还没有测试它,因为我现在有多个嵌套循环并且在我重写我的代码之前想要一个选项。

标签: phpelasticsearch

解决方案


外部资源请求总是很慢。所以最好创建单个请求。外部数据库将以相同的速度处理它,但您将节省请求时间。

另一方面,您可以获得如此大的查询,以至于您的客户端(例如浏览器)将超时,或者您无法将所有内容都放入内存进行处理。


使用具有合理数据量的单个查询。


推荐阅读