Как хранить повторно используемые данные в эластичном поиске

Поскольку я не хочу вызывать API каждый раз, когда мне нужны определенные данные (например, массив из 1000 строк), я хотел бы сохранить этот массив в ElasticSearch, чтобы я мог легко получить этот массив без необходимости вызывать API. Я использую FOS Elastic Bundle. Возможно ли это сделать, и если да, то как?

Что бы я сделал:

-I have a function that gets this data from database
-I would like to save this data in ES after calling php bin/console fos:elastica:populate
-use this array in controller to return it to the view and use it there.

person Steven Seagull    schedule 14.03.2017    source источник


Ответы (1)


Я бы посоветовал вам определить тип с отображением, которое может охватывать одну строку в вашей базе данных. После этого, когда вы извлечете 1000 строк из базы данных, вы можете проиндексировать эти 1000 строк в одном вызове массового индексирования в виде 1000 документов: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html Вы Затем можно получить эти 1000 документов для использования в контроллере.

Кроме того, вы можете определить сопоставление с вложенным свойством. Это вложенное свойство должно быть идентично строке в вашей базе данных. Используя это, вы можете создать один документ с 1000 строками ваших данных внутри вложенного свойства, такого как массив. После этого вы можете получить этот единственный документ.

Какая из этих стратегий лучше, будет зависеть от ваших требований. Второй — более тяжелый процесс индексации, а первый — относительно тяжелый процесс выборки. По моему опыту работы с ElasticSearch, лучше иметь более легкие запросы на индексацию, чтобы обеспечить согласованность данных. В зависимости от ваших данных вы можете создать 1000 документов с идентификаторами в определенном шаблоне, а с известными идентификаторами получение этих документов становится очень эффективным.

person Ashish Goel    schedule 14.03.2017