{"id":758,"date":"2018-12-05T21:42:30","date_gmt":"2018-12-05T20:42:30","guid":{"rendered":"http:\/\/louis.hatier.me\/blog\/?p=758"},"modified":"2019-11-21T15:36:09","modified_gmt":"2019-11-21T14:36:09","slug":"symfony-connecter-avec-mongodb-et-elasticsearch","status":"publish","type":"post","link":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/","title":{"rendered":"Symfony : connecter avec MongoDB et Elasticsearch"},"content":{"rendered":"<p><a href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\" data-rel=\"lightbox-gallery-FNtfKo7V\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-759 alignleft\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\" alt=\"symfony-mongodb-elasticsearch\" width=\"332\" height=\"125\" srcset=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg 600w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch-300x113.jpg 300w\" sizes=\"auto, (max-width: 332px) 100vw, 332px\" \/><\/a>Symfony permet \u00e0 l\u2019aide de bundle, de s\u2019impl\u00e9menter facilement avec <strong>MongoDB<\/strong> et <strong>Elasticsearch<\/strong>.<\/p>\n<p>Le principe dans l\u2019exemple qui suit, est une application web Symfony qui fonctionne avec une base ma\u00eetre MongoDB.<br \/>\nCette base MongoDB synchronise r\u00e9guli\u00e8rement certaines de ses donn\u00e9es dans Elasticsearch qui sera responsable de la recherche.<\/p>\n<p>Symfony interroge ensuite Elasticsearch afin d\u2019obtenir des r\u00e9sultats de recherche, qui lui renvoie les <code>id<\/code> des objets MongoDB afin d\u2019aller chercher l\u2019information brute dans la base ma\u00eetre.<\/p>\n<p><!--more--><\/p>\n<h2>Elasticsearch<\/h2>\n<p><span style=\"font-weight: 400;\">Installer Elasticsearch \u00e0 l\u2019aide de la <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/install-elasticsearch.html\" target=\"_blank\" rel=\"noopener noreferrer\">documentation officielle<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Une fois install\u00e9 et lanc\u00e9, on peut v\u00e9rifier si Elasticsearch est bien en route \u00e0 l\u2019aide de cette commande :<\/span><\/p>\n<pre><code class=\"no-highlight\">curl -X GET \"localhost:9200\/\"\n<\/code><\/pre>\n<p>R\u00e9sultat :<\/p>\n<pre><code class=\"no-highlight\">{\n  \"name\" : \"_5_5A27\",\n  \"cluster_name\" : \"elasticsearch\",\n  \"cluster_uuid\" : \"RLlBm2geTvqkfesixGotTg\",\n  \"version\" : {\n    \"number\" : \"6.5.1\",\n    \"build_flavor\" : \"default\",\n    \"build_type\" : \"deb\",\n    \"build_hash\" : \"8c58350\",\n    \"build_date\" : \"2018-11-16T02:22:42.182257Z\",\n    \"build_snapshot\" : false,\n    \"lucene_version\" : \"7.5.0\",\n    \"minimum_wire_compatibility_version\" : \"5.6.0\",\n    \"minimum_index_compatibility_version\" : \"5.0.0\"\n  },\n  \"tagline\" : \"You Know, for Search\"\n}\n<\/code><\/pre>\n<p>On peut cr\u00e9er un premier index de cette fa\u00e7on :<\/p>\n<pre><code class=\"no-highlight\">curl -X PUT \"localhost:9200\/customer?pretty\"\ncurl -X GET \"localhost:9200\/_cat\/indices?v\"\n<\/code><\/pre>\n<p><a href=\"http:\/\/www.elastichq.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ElasticHQ<\/a> est un outil int\u00e9ressant \u00e0 installer, et gratuit, qui permet de suivre la sant\u00e9 du noeud Elasticsearch et les index qui s&rsquo;y trouvent.<br \/>\nUne fois r\u00e9cup\u00e9rer, on lance l\u2019interface avec Python :<\/p>\n<pre><code class=\"no-highlight\">python3 manage.py runserver\n<\/code><\/pre>\n<p>L\u2019interface sera disponible \u00e0 l\u2019URL suivant : http:\/\/localhost:5000<\/p>\n<div id=\"attachment_760\" style=\"width: 630px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq.png\" data-rel=\"lightbox-gallery-FNtfKo7V\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-760\" class=\"wp-image-760 size-large\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq-1024x453.png\" alt=\"elastichq\" width=\"620\" height=\"274\" srcset=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq-1024x453.png 1024w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq-300x133.png 300w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq-768x339.png 768w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/elastichq.png 1914w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><p id=\"caption-attachment-760\" class=\"wp-caption-text\">Interface d&rsquo;ElasticHQ<\/p><\/div>\n<p>Pour s\u2019interfacer avec Symfony on va utiliser le bundle <a href=\"https:\/\/github.com\/FriendsOfSymfony\/FOSElasticaBundle\/blob\/master\/doc\/index.md\" target=\"_blank\" rel=\"noopener noreferrer\">FOSElastica<\/a> ainsi qu&rsquo;un serializer.<\/p>\n<pre><code class=\"no-highlight\">composer require friendsofsymfony\/elastica-bundle\ncomposer require jms\/serializer-bundle\n<\/code><\/pre>\n<h2>MongoDB<\/h2>\n<p>L\u2019installation se fait depuis le <a href=\"https:\/\/www.mongodb.com\/download-center\/community\" target=\"_blank\" rel=\"noopener noreferrer\">site officiel<\/a>.<\/p>\n<p>On lance l\u2019instance de MongoDB :<\/p>\n<pre><code class=\"no-highlight\">sudo service mongod start\n<\/code><\/pre>\n<p>L\u2019outil MongoBooster (d\u00e9sormais NoSQLBooster) est pratique pour visualiser les collections de documents, bien que certaines fonctionnalit\u00e9s deviennent payantes au fil du temps (autocompletion par exemple).<\/p>\n<p>On installe le connecteur PHP :<\/p>\n<pre><code class=\"no-highlight\">sudo apt install php-mongodb\n<\/code><\/pre>\n<p>Une petite commande est n\u00e9cessaire pour faire fonctionner Doctrine MongoDB ODM avec PHP7 :<\/p>\n<pre><code class=\"no-highlight\">composer config \"platform.ext-mongo\" \"1.6.16\" &amp;&amp; composer require \"alcaeus\/mongo-php-adapter\"\n<\/code><\/pre>\n<p>Puis les librairies qui vont bien :<\/p>\n<pre><code class=\"no-highlight\">composer require alcaeus\/mongo-php-adapter\ncomposer require doctrine\/mongodb-odm\ncomposer require doctrine\/mongodb-odm-bundle\n<\/code><\/pre>\n<h2>Symfony<\/h2>\n<p>Un peu de config pour faire fonctionner les bundles (disponible sur les documentations respectives)<\/p>\n<p><code>app\/config\/parameters.yml<\/code><\/p>\n<pre><code class=\"no-highlight\">parameters:\n    mongodb_server: \"mongodb:\/\/localhost:27017\"\n<\/code><\/pre>\n<p><code>app\/config\/config.yml<\/code><\/p>\n<pre><code class=\"no-highlight\">doctrine_mongodb:\n    connections:\n        default:\n            server: \"%mongodb_server%\"\n            options: {}\n    default_database: test\n    document_managers:\n        default:\n            auto_mapping: true\n\nfos_elastica:\n    default_manager: mongodb\n    serializer:\n        serializer: jms_serializer\n    clients:\n        default: { host: localhost, port: 9200 }\n    indexes:\n        app:\n            types:\n                contacts:\n                    properties:\n                        name: ~\n                        lastName: ~\n                    persistence:\n                        # the driver can be orm, mongodb or phpcr\n                        driver: mongodb\n                        model: AppBundle\\Document\\Contacts\n                        provider: ~\n                        finder: ~\n<\/code><\/pre>\n<p><code>src\/AppBundle\/Document\/Contacts.php<\/code><\/p>\n<pre><code class=\"php\">namespace AppBundle\\Document;\n\nuse Doctrine\\ODM\\MongoDB\\Mapping\\Annotations as MongoDB;\n\n\/**\n * @MongoDB\\Document\n *\/\nclass Contacts\n{\n    \/**\n     * @MongoDB\\Id\n     *\/\n    protected $id;\n\n    \/**\n     * @MongoDB\\Field(type=\"string\")\n     *\/\n    protected $name;\n\n    \/**\n     * @MongoDB\\Field(type=\"string\")\n     *\/\n    protected $last_name;\n<\/code><\/pre>\n<p>On configure Doctrine avec le MongoDB install\u00e9 en local, idem avec Elasticsearch.<br \/>\nOn peut pr\u00e9ciser \u00e0 Elasticsearch d\u2019indexer les contacts (qui est un Document plut\u00f4t qu\u2019une Entity), via listener, lancement manuel ou scheduler avec la commande suivante :<\/p>\n<pre><code class=\"no-highlight\">php bin\/console fos:elastica:populate\n<\/code><\/pre>\n<p>Pour cr\u00e9er et lire des documents dans MongoDB, on utilise Doctrine de mani\u00e8re habituelle.<\/p>\n<pre><code class=\"php\">$contact = new Contacts();\n$contact\n    -&gt;setName('John')\n    -&gt;setLastName('Doe')\n;\n\n$dm = $this-&gt;get('doctrine_mongodb')-&gt;getManager();\n$dm-&gt;persist($contact);\n$dm-&gt;flush();\n\n\/*\n......\n*\/\n\n$contacts = $this-&gt;get('doctrine_mongodb')\n    -&gt;getRepository(Contacts::class)\n    -&gt;findAll()\n;\n<\/code><\/pre>\n<div id=\"attachment_761\" style=\"width: 641px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/mongobooster.png\" data-rel=\"lightbox-gallery-FNtfKo7V\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-761\" class=\"wp-image-761 size-full\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/mongobooster.png\" alt=\"mongobooster\" width=\"631\" height=\"488\" srcset=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/mongobooster.png 631w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/mongobooster-300x232.png 300w\" sizes=\"auto, (max-width: 631px) 100vw, 631px\" \/><\/a><p id=\"caption-attachment-761\" class=\"wp-caption-text\">Aper\u00e7u dans MongoBooster<\/p><\/div>\n<p>Une fois Elasticsearch index\u00e9, il est possible de r\u00e9cup\u00e9rer nos documents via une recherche elastic plus ou moins complexe (voir <a href=\"https:\/\/github.com\/FriendsOfSymfony\/FOSElasticaBundle\/blob\/master\/doc\/usage.md\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>)<\/p>\n<pre><code class=\"php\">$finder = $this-&gt;container-&gt;get('fos_elastica.finder.app.contacts');\n$results = $finder-&gt;find('John');\n<\/code><\/pre>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/dot.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"pinterest\",\"email\",\"linkedin\");var hupso_counters_lang = \"en_US\";var hupso_image_folder_url = \"\";var hupso_url_c=\"\";var hupso_title_c=\"Symfony%20%3A%20connecter%20avec%20MongoDB%20et%20Elasticsearch\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Symfony permet \u00e0 l\u2019aide de bundle, de s\u2019impl\u00e9menter facilement avec MongoDB et Elasticsearch. Le principe dans l\u2019exemple qui suit, est une application web Symfony qui fonctionne avec une base ma\u00eetre MongoDB. Cette base MongoDB synchronise r\u00e9guli\u00e8rement certaines de ses donn\u00e9es dans Elasticsearch qui sera responsable de la recherche. Symfony interroge ensuite Elasticsearch afin d\u2019obtenir des [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[80,81,57,18],"class_list":["post-758","post","type-post","status-publish","format-standard","hentry","category-php","tag-elasticsearch","tag-mongodb","tag-php","tag-symfony"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre<\/title>\n<meta name=\"description\" content=\"Comment plugger MongoDB et Elastisearch avec Symfony\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre\" \/>\n<meta property=\"og:description\" content=\"Comment plugger MongoDB et Elastisearch avec Symfony\" \/>\n<meta property=\"og:url\" content=\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\" \/>\n<meta property=\"og:site_name\" content=\"Melting Poutre\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-05T20:42:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-21T14:36:09+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\" \/>\n<meta name=\"author\" content=\"Louis Hatier\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Louis Hatier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\"},\"author\":{\"name\":\"Louis Hatier\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"headline\":\"Symfony : connecter avec MongoDB et Elasticsearch\",\"datePublished\":\"2018-12-05T20:42:30+00:00\",\"dateModified\":\"2019-11-21T14:36:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\"},\"wordCount\":374,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\",\"keywords\":[\"Elasticsearch\",\"MongoDB\",\"PHP\",\"Symfony\"],\"articleSection\":[\"PHP\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\",\"url\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\",\"name\":\"Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\",\"datePublished\":\"2018-12-05T20:42:30+00:00\",\"dateModified\":\"2019-11-21T14:36:09+00:00\",\"description\":\"Comment plugger MongoDB et Elastisearch avec Symfony\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage\",\"url\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\",\"contentUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\",\"url\":\"https:\/\/louis.hatier.me\/blog\/\",\"name\":\"Melting Poutre\",\"description\":\"Du web et d&#039;autres choses\",\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\",\"name\":\"Louis Hatier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"caption\":\"Louis Hatier\"},\"logo\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/louis.hatier.me\",\"https:\/\/www.linkedin.com\/in\/louishatier\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre","description":"Comment plugger MongoDB et Elastisearch avec Symfony","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/","og_locale":"fr_FR","og_type":"article","og_title":"Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre","og_description":"Comment plugger MongoDB et Elastisearch avec Symfony","og_url":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/","og_site_name":"Melting Poutre","article_published_time":"2018-12-05T20:42:30+00:00","article_modified_time":"2019-11-21T14:36:09+00:00","og_image":[{"url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg","type":"","width":"","height":""}],"author":"Louis Hatier","twitter_misc":{"\u00c9crit par":"Louis Hatier","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#article","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/"},"author":{"name":"Louis Hatier","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"headline":"Symfony : connecter avec MongoDB et Elasticsearch","datePublished":"2018-12-05T20:42:30+00:00","dateModified":"2019-11-21T14:36:09+00:00","mainEntityOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/"},"wordCount":374,"commentCount":0,"publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg","keywords":["Elasticsearch","MongoDB","PHP","Symfony"],"articleSection":["PHP"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/","url":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/","name":"Symfony : connecter avec MongoDB et Elasticsearch - Melting Poutre","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg","datePublished":"2018-12-05T20:42:30+00:00","dateModified":"2019-11-21T14:36:09+00:00","description":"Comment plugger MongoDB et Elastisearch avec Symfony","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/symfony-connecter-avec-mongodb-et-elasticsearch\/#primaryimage","url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg","contentUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2018\/12\/symfony-mongodb-elasticsearch.jpg"},{"@type":"WebSite","@id":"https:\/\/louis.hatier.me\/blog\/#website","url":"https:\/\/louis.hatier.me\/blog\/","name":"Melting Poutre","description":"Du web et d&#039;autres choses","publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11","name":"Louis Hatier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","caption":"Louis Hatier"},"logo":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/louis.hatier.me","https:\/\/www.linkedin.com\/in\/louishatier\/"]}]}},"_links":{"self":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/comments?post=758"}],"version-history":[{"count":8,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/758\/revisions"}],"predecessor-version":[{"id":824,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/758\/revisions\/824"}],"wp:attachment":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/media?parent=758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/categories?post=758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/tags?post=758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}