Я так понял, что для поиска в elasticsearch необходимо, чтобы данные были в самом индексе (базе данных, если по человечески). Т.е. дублирование, к примеру, таблицы `posts` из MySQL в ElasticSearch индексе. Вопрос в том, что лучше использовать? Logstash c плагином jdbc делать вставку, как описал ниже, а при последующих добавлениях записей, добавлять копию в elastisearch (при удалении записи из MySQL удалять копию из Elasticsearch, т.к. id записи в MySQL и в Elasticsearch одинаковые) PHP: require_once 'vendor/autoload.php'; use Elasticsearch\ClientBuilder; $db = new mysqli('127.0.0.1:3306','root','','network'); $data = $db->query("SELECT * FROM posts"); $data = $data->fetch_assoc(); $client = ClientBuilder::create()->build(); foreach($data as $row) { $params = [ 'index' => 'network', 'type' => 'posts', 'id' => $data['id'], 'body' => [ 'content' => $data['content'] ] ]; } $res = $client->index($params); P.S. Предполагается, что будет добавляться один пост в минуту. Полгиговый дедик, 5GB HDD надеюсь справится.
Так это же не суть, перебрать каждое значение с начала или с конца массива. А ну и, в $params там вместо $data['id'] и $data['content'] конечно же $row['id'] и $row['content']
Второй вариант. Он ближе к документации ) p.s. обратите внимание на bulk(), при вставке большого количества документов разом - быстее. --- Добавлено --- По дефолту он пытается отожрать 1 GB оперативки: https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html