»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 );

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.

Das könnte auch interessant sein

Schreib einen Kommentar

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