»Related Posts«-Funktion von ElasticPress mit Elasticsearch 6 nutzen

Vor einiger Zeit habe ich auf Elasticsearch 6 aktualisiert, woraufhin die ElasticPress-Funktion zur Anzeige ähnlicher Beiträge nicht mehr funktioniert hat. Erst dachte ich, das habe mit einem ElasticPress-Issue zu tun – letztlich lag es aber an einem von ElasticPress genutzten Parameter, der in Elasticsearch 6 nicht mehr unterstützt wird und angepasst werden muss.

ElasticPress gibt über $formatted_args['query']['more_like_this']['ids'] an, zu welchem Beitrag ähnliche Inhalte gefunden werden sollen. Diesen ids-Key gibt es in Elasticsearch 6 nicht mehr, stattdessen muss pro Inhalt, zu dem ähnliche Einträge gesucht werden, ein Array unter $formatted_args['query']['more_like_this']['like'] angelegt werden, in dem über den Schlüssel _id die ID des Inhalts angegeben wird (das ist in der Elasticsearch-6.2-Doku für »More Like This Query« gezeigt).

Konkret habe ich das mit dem ep_formatted_args-Filter von ElasticPress umgesetzt und darin den alten Parameter durch den neuen ersetzt:

function fbn_ep_formatted_args( $formatted_args ) { // Get the ids (usually only one) and unset the unused key. $ids = $formatted_args['query']['more_like_this']['ids']; unset($formatted_args['query']['more_like_this']['ids']); // Set the id in the Elasticsearch 6 compatible way. $formatted_args['query']['more_like_this']['like'][] = [ '_id' => "$ids[0]", ]; return $formatted_args; } add_filter( 'ep_formatted_args', 'fbn_ep_formatted_args', 20 );
Code-Sprache: PHP (php)

Ich hole zuerst die IDs und lösche den Eintrag aus dem Array. Da das normalerweise nur eine sein wird, brauche ich keine Schleife zu durchlaufen, um mehrere Einträge für $formatted_args['query']['more_like_this']['like'] anzulegen, sondern trage direkt den Wert von $ids[0] für _id ein. Danach gebe ich das Array zurück und bekomme wieder ähnliche Beiträge angezeigt, statt nur die neuesten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert