web-dev-qa-db-fra.com

REST Point de terminaison de l'API pourasticpress autosuggest

AJAX, qui fait partie d'Elasticpress, ressemble à ceci

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

De plus j'ai enregistré mon endpoint

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

Le rappel ressemble à ceci

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

Les différentes parties fonctionnent comme il se doit. J'ai du mal à obtenir les données de l'objet transmis. Des idées?

4
Nicolai

Après quelques inspections du WP_REST_Request , il s’est avéré que la méthode get_body() était celle que je cherchais. Quoi qu'il en soit, c'est ce que j'ai fini avec:

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;
}

Pour ceux que ça intéresse, j'en ai fait un plugin:

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

6
Nicolai

Merci pour le plugin Nicolai! Je voulais juste souligner quelques points qui n'étaient pas clairs pour moi:

Une fois le plugin installé, modifiez ep_autosuggest () dans élastiquepress-autosuggest-endpoint.php:

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

Ensuite, utilisez http (s): //votrenomdedomaine.com/wp-json/elasticpress/autosuggest/ (ou tout autre élément spécifié dans register_rest_route ()) en tant qu'URL de point de terminaison dans admin/ElasticPresss/Autosuggest/Settings.

2
Dmitriy