{"id":182,"date":"2016-02-29T11:43:40","date_gmt":"2016-02-29T08:43:40","guid":{"rendered":"http:\/\/presta.site\/blog\/?p=182"},"modified":"2021-10-22T15:18:50","modified_gmt":"2021-10-22T12:18:50","slug":"using-sphinx-search-in-prestashop","status":"publish","type":"post","link":"https:\/\/presta.site\/blog\/en\/using-sphinx-search-in-prestashop\/","title":{"rendered":"Using Sphinx search in PrestaShop"},"content":{"rendered":"<p>PrestaShop have a nice search tool, but sometimes it doesn&#8217;t fit all your needs. Also it is not really fast and on large shops search and indexation could be very slow.<\/p>\n<p>If you want something better, you can use a great replacement &#8212; Sphinx.<\/p>\n<p><!--more--><br \/>\nFrom Wikipedia:<\/p>\n<blockquote><p>Sphinx is a free software\/open source Fulltext search engine designed to provide full-text search functionality to client applications.<\/p><\/blockquote>\n<p>Sphinx website &#8212; <a href=\"http:\/\/sphinxsearch.com\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/sphinxsearch.com\/<\/a><\/p>\n<h2>Sphinx installation<\/h2>\n<p>I&#8217;ve used Debian 8.1. In other Linux distributions (and especially in Windows) installation may differ slightly.<br \/>\nIf Sphinx is available in repos, just install it:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">su<\/span><br \/>\n<span class=\"kw2\">apt-get update<\/span><br \/>\n<span class=\"kw2\">apt-get install<\/span> sphinxsearch<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>It Sphinx is not available in repos, you can download an installer from official website and install dependencies:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">apt-get install<\/span> mysql-client unixodbc libpq5<br \/>\n<span class=\"kw2\">wget<\/span> http:<span class=\"sy0\">\/\/<\/span>sphinxsearch.com<span class=\"sy0\">\/<\/span>files<span class=\"sy0\">\/<\/span>sphinxsearch_2.2.9-release-<span class=\"nu0\">1<\/span>~wheezy_i386.deb<br \/>\n<span class=\"kw2\">dpkg<\/span> <span class=\"re5\">-i<\/span> sphinxsearch_2.2.9-release-<span class=\"nu0\">1<\/span>~wheezy_i386.deb<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>You have to replace name and url of installer with current relevant versions. They all are available on official website.<\/p>\n<h2>Sphinx configuration<\/h2>\n<p>Open Sphinx config and edit it:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">nano<\/span> <span class=\"sy0\">\/<\/span>etc<span class=\"sy0\">\/<\/span>sphinxsearch<span class=\"sy0\">\/<\/span>sphinx.conf<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>You need to edit existing default block &#171;source src1&#187; (or add a new block). Result should look like this:<\/p>\n<div class=\"codecolorer-container ini blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/><\/div><\/td><td><div class=\"ini codecolorer\">source PrestaSite<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re1\">type<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> mysql<\/span><br \/>\n<span class=\"re1\">sql_host<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> localhost<\/span><br \/>\n# PrestaShop database username<br \/>\n<span class=\"re1\">sql_user<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBUSER<\/span><br \/>\n# PrestaShop database password<br \/>\n<span class=\"re1\">sql_pass<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBPASSWORD<\/span><br \/>\n# PrestaShop database name<br \/>\n<span class=\"re1\">sql_db<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBNAME<\/span><br \/>\n<span class=\"re1\">sql_port<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> 3306 # optional, default is 3306<\/span><br \/>\n<span class=\"re1\">sql_query_pre<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> SET NAMES utf8<\/span><br \/>\n<br \/>\n# MySQL query with list of fields for indexation<br \/>\n<span class=\"re1\">sql_query<\/span> <span class=\"sy0\">=<\/span> <br \/>\nSELECT id_product, name, description, description_short<br \/>\nFROM ps_product_lang<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>First you can see the settings for connecting to the database (<span class=\"bold\">don&#8217;t forget to change them to relevant<\/span>). Param <span class=\"bold\">sql_query<\/span> contains a query with fields for indexation.<\/p>\n<p>This is all settings from my config. Basically, the config file is well documented and all options are described there, so you could easily customize your configuration.<\/p>\n<p>Next, in the &#171;index definition&#187; block you need to configure index:<\/p>\n<div class=\"codecolorer-container ini blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/><\/div><\/td><td><div class=\"ini codecolorer\">index PrestaSite<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n# data source for indexation<br \/>\n<span class=\"re1\">source<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> PrestaSite<\/span><br \/>\n<br \/>\n# location for index data<br \/>\n<span class=\"re1\">path<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> \/var\/lib\/sphinxsearch\/data\/prestasite<\/span><br \/>\n<br \/>\n# morphology preprocessors<br \/>\n<span class=\"re1\">morphology<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> stem_en<\/span><br \/>\n<br \/>\n# minimal word length for indexation<br \/>\n<span class=\"re1\">min_word_len<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> 1<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Next you can see &#171;indexer settings&#187; and &#171;searchd settings&#187; blocks. Usually they are ok, you can just skip them.<\/p>\n<p><span class=\"bold\">So, we&#8217;ve configured data source (source PrestaSite) and index (index PrestaSite).<\/span><\/p>\n<h2>Indexation<\/h2>\n<p>Launch indexer in order to index your database:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">indexer <span class=\"re5\">--all<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h2>Sphinx launch<\/h2>\n<p>Don&#8217;t forget to start\/restart searchd:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">searchd<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>And add indexer to crontab:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"nu0\">15<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> root indexer <span class=\"re5\">--all<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Indexation will be launched every hour.<\/p>\n<h2>PrestaShop configuration<\/h2>\n<p>Below you can see the code for PrestaShop 1.6. For other PrestaShop versions it may differ slightly.<\/p>\n<p>Create (or edit) Search class override:<br \/>\n\/override\/classes\/Search.php<\/p>\n<div class=\"codecolorer-container php blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">&lt;?php<\/span><br \/>\n<span class=\"kw2\">class<\/span> Search <span class=\"kw2\">extends<\/span> SearchCore <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> static <span class=\"kw2\">function<\/span> find<span class=\"br0\">&#40;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$expr<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_number<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$order_by<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'position'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$order_way<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'desc'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$ajax<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$use_cookie<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> Context <span class=\"re0\">$context<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">null<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$context<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$context<\/span> <span class=\"sy0\">=<\/span> Context<span class=\"sy0\">::<\/span><span class=\"me2\">getContext<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$db<\/span> <span class=\"sy0\">=<\/span> Db<span class=\"sy0\">::<\/span><span class=\"me2\">getInstance<\/span><span class=\"br0\">&#40;<\/span>_PS_USE_SQL_SLAVE_<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ TODO : smart page management<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_number<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"re0\">$page_number<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_size<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"re0\">$page_size<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderBy<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_by<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderWay<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_way<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderBy<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_by<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderWay<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_way<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$start<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_number<\/span> <span class=\"sy0\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> <span class=\"re0\">$page_size<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Sphinx search, get ids of found products<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sphinx_results<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">self<\/span><span class=\"sy0\">::<\/span><span class=\"me2\">getSphinxResults<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$expr<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$start<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get products by id if something found<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/is_array\"><span class=\"kw3\">is_array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#41;<\/span> AND <a href=\"http:\/\/www.php.net\/sizeof\"><span class=\"kw3\">sizeof<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#41;<\/span> AND <a href=\"http:\/\/www.php.net\/isset\"><span class=\"kw3\">isset<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> AND <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sql<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` manufacturer_name, MAX(product_attribute_shop.`id_product_attribute`) id_product_attribute,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DATEDIFF(<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.`date_add`,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DATE_SUB(<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOW(),<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTERVAL '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isUnsignedInt<\/span><span class=\"br0\">&#40;<\/span>Configuration<span class=\"sy0\">::<\/span><span class=\"me2\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'PS_NB_DAYS_NEW_PRODUCT'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> ? Configuration<span class=\"sy0\">::<\/span><span class=\"me2\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'PS_NB_DAYS_NEW_PRODUCT'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">:<\/span> <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">' DAY<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) &gt; 0 new<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM '<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product p<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'product'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'p'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INNER JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product_lang` pl ON (<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.`id_product` = pl.`id_product`<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND pl.`id_lang` = '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlRestrictionOnLang<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'pl'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product_attribute` pa ON (p.`id_product` = pa.`id_product`)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'product_attribute'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'pa'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'product_attribute_shop.`default_on` = 1'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Product<span class=\"sy0\">::<\/span><span class=\"me2\">sqlStock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'p'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'product_attribute_shop'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$context<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">shop<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'image` i ON (i.`id_product` = p.`id_product`)'<\/span><span class=\"sy0\">.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'image'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'i'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'image_shop.cover=1'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">')<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE p.`id_product` IN('<\/span><span class=\"sy0\">.<\/span><a href=\"http:\/\/www.php.net\/implode\"><span class=\"kw3\">implode<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">','<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'results'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">')<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GROUP BY product_shop.id_product'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$db<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">executeS<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sql<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ results count<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$result<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result_properties<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result_properties<\/span> <span class=\"sy0\">=<\/span> Product<span class=\"sy0\">::<\/span><span class=\"me2\">getProductsProperties<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$result<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'total'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$total<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'result'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$result_properties<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> static <span class=\"kw2\">function<\/span> getSphinxResults<span class=\"br0\">&#40;<\/span><span class=\"re0\">$search_query<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_number<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$results<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$search_query<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ connect to Sphinx database<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$link<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/mysqli_connect\"><span class=\"kw3\">mysqli_connect<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'127.0.0.1'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'9306'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$link<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$query<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT * FROM `PrestaSite` WHERE MATCH(\\''<\/span><span class=\"sy0\">.<\/span>pSQL<span class=\"br0\">&#40;<\/span><span class=\"re0\">$search_query<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'\\') limit '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$page_number<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">', '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$page_size<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">';'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$link<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">query<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">while<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query_results<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fetch_array<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$results<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array_merge\"><span class=\"kw3\">array_merge<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$results<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$query_results<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">\/* clear result *\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">close<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get count of results<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$query_total<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT count(*) FROM `PrestaSite` WHERE MATCH(\\''<\/span><span class=\"sy0\">.<\/span>pSQL<span class=\"br0\">&#40;<\/span><span class=\"re0\">$search_query<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'\\');'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$link<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">query<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query_total<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fetch_array<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$total<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">1000<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1000<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/mysqli_close\"><span class=\"kw3\">mysqli_close<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$link<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'results'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$results<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'total'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$total<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Basically, the code is pretty simple. We override function &#171;find&#187;, in which we replace PrestaShop search by Sphinx search. Sphinx returns product ids and by using those ids we query products data. The second function (getSphinxResults) directly performs the search.<\/p>\n<p>At the end, you need to clear the cache and remove class cache (\/cache\/class_index.php). All done!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PrestaShop have a nice search tool, but sometimes it doesn&#8217;t fit all your needs. Also it is not really fast and on large shops search and indexation could be very slow. If you want something better, you can use a great replacement &#8212; Sphinx.<\/p>\n","protected":false},"author":1,"featured_media":49,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[25,1],"tags":[],"_links":{"self":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/182"}],"collection":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/comments?post=182"}],"version-history":[{"count":16,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/182\/revisions"}],"predecessor-version":[{"id":562,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/182\/revisions\/562"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/media\/49"}],"wp:attachment":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/media?parent=182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/categories?post=182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/tags?post=182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}