{"id":534,"title":"php\u4e2delasticsearch scroll\u65b9\u5f0f\u67e5\u8be2","good":0,"bad":0,"hit":2553,"created_at":"2021-03-25 21:16:50","content":"

<\/p>

\/**\n * scroll\u65b9\u5f0f\u4ecees\u4e2d\u67e5\u6570\u636e\n *\n * $fields = [\n *      'ticket_no'\n * ];\n * $query = [\n *      'term' => [\n *              'third_order_id' => $thirdOrderId,\n *      ]\n * ];\n *\n * @param array $fields \u8981\u8fd4\u56de\u7684\u5b57\u6bb5\u540d\n * @param array $query \u67e5\u8be2\u6761\u4ef6\n * @param bool $justNo \u662f\u5426\u53ea\u8fd4\u56de\u5de5\u5355\u53f7\n * @param array $sort \u6392\u5e8f\u6761\u4ef6\n * @return array\n *\/\npublic function getEsDataByScroll(array $fields, array $query, $justNo, array $sort = [])\n{\n    $result = [];\n    $client = $this->connectElasticsearch();\n    $esConfig = $this->container->getParameter('elasticsearch_indexs');\n    $index = !empty($esConfig['tickets_index']) ? $esConfig['tickets_index'] : '';\n    if (empty($sort)) {\n        $sort = [\n            [\n                'create_time' => [\n                    'order' => 'desc',\n                    'unmapped_type' => 'date'\n                ]\n            ]\n        ];\n    }\n    $search = [\n        'index' => $index,\n        'type' => 'tk_tickets',\n        'from' => 0,\n        'size' => 10000,\n        'scroll' => '5m',\n        'body' => [\n            '_source' => $fields,\n            'query' => [\n                'bool' => [\n                    'must' => $query\n                ]\n            ],\n            'sort' => $sort\n        ]\n    ];\n    $rows = $client->search($search);\n    \/\/\u518d\u6b21\u67e5\u8be2\uff0c\u76f4\u81f3\u53d6\u5b8c\n    while (!empty($rows['hits']['hits'])) {\n        $result = array_merge($result, $rows['hits']['hits']);\n        $scrollId = empty($rows['_scroll_id']) ? '' : $rows['_scroll_id'];\n        $scrollParam['scroll'] = '5m';\n        $scrollParam['scroll_id'] = $scrollId;\n        $rows = $client->scroll($scrollParam);\n    }\n\n    if (!empty($result) && $justNo) {\n        $ticketNos = [];\n        foreach ($result as $v) {\n            if (!empty($v['_source']['ticket_no'])) {\n                array_push($ticketNos, $v['_source']['ticket_no']);\n            }\n        }\n        $result = $ticketNos;\n    }\n\n    return $result;\n}<\/pre>

<\/p>"}