»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

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)