webentwicklung-frage-antwort-db.com.de

REST API-Endpunkt für die automatische Prüfung mit elasticpress

So sieht der AJAX aus, der zu Elasticpress gehört

$.ajax( {
    url: epas.endpointUrl,
    type: 'GET',
    dataType: 'json',
    crossDomain: true,
    data: JSON.stringify( query )
} );

Zusätzlich habe ich meinen Endpunkt registriert

add_action( 'rest_api_init', function ( $data ) {
    register_rest_route( 'elasticpress', '/autosuggest/', [
        'methods' => 'GET',
        'callback' => 'ep_autosuggest'
    ] );
} );

Der Rückruf sieht so aus

function ep_autosuggest( $data ) {
    // Elasticsearch PHP Client
    $client = ClientBuilder::create()->build();
    $params = [
        'index' => 'index',
        'type' => 'post',
        'body' => $data
    ];
    $response = $client->search( $params );
    return $response;
}

Die verschiedenen Teile funktionieren wie sie sollten. Ich habe Probleme damit, die Daten von dem übergebenen Objekt zu erhalten. Irgendwelche Ideen?

4
Nicolai

Nach einigem Hinsehen von WP_REST_Request stellte sich heraus, dass die Methode get_body() die gesuchte war. Jedenfalls ist es das, womit ich gelandet bin:

add_action( 'rest_api_init', function() {
    register_rest_route( 'ep', '/as/', [
        'methods' => \WP_REST_Server::CREATABLE,
        'callback' => 'ep_autosuggest',
    ] );
} );
function ep_autosuggest( WP_REST_Request $data ) {
    // Elasticsearch PHP Client
    $client = ClientBuilder::create()->build();
    $params = [
        'index' => 'ep-test',
        'type' => 'post',
        'body' => $data->get_body()
    ];
    $response = $client->search( $params );
    return $response;
}

Für alle Interessierten habe ich ein Plugin daraus gemacht:

https://github.com/grossherr/elasticpress-autosuggest-endpoint

6
Nicolai

Danke für das Plugin Nicolai! Ich wollte nur auf ein paar Dinge hinweisen, die mir nicht klar waren:

Sobald das Plugin installiert ist, ändern Sie ep_autosuggest () in elasticpress-autosuggest-endpoint.php:

$params = [
    'index' => ep_get_index_name(), // get name of ES index dynamically
    'type' => 'post',
    'body' => $data->get_body()
];

Verwenden Sie dann http (s): //IhrDomänenname.com/wp-json/elasticpress/autosuggest/ (oder was auch immer in register_rest_route () angegeben ist) als Endpunkt-URL in admin/ElasticPresss/Autosuggest/Settings.

2
Dmitriy