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.