The AJAX, which is part of Elasticpress, looks like this
$.ajax( {
url: epas.endpointUrl,
type: 'GET',
dataType: 'json',
crossDomain: true,
data: JSON.stringify( query )
} );
Additionally I registered my endpoint
add_action( 'rest_api_init', function ( $data ) {
register_rest_route( 'elasticpress', '/autosuggest/', [
'methods' => 'GET',
'callback' => 'ep_autosuggest'
] );
} );
The callback looks like this
function ep_autosuggest( $data ) {
// Elasticsearch PHP Client
$client = ClientBuilder::create()->build();
$params = [
'index' => 'index',
'type' => 'post',
'body' => $data
];
$response = $client->search( $params );
return $response;
}
The different parts work as they should. I'm struggling with getting the data from the passed object. Any ideas?
The AJAX, which is part of Elasticpress, looks like this
$.ajax( {
url: epas.endpointUrl,
type: 'GET',
dataType: 'json',
crossDomain: true,
data: JSON.stringify( query )
} );
Additionally I registered my endpoint
add_action( 'rest_api_init', function ( $data ) {
register_rest_route( 'elasticpress', '/autosuggest/', [
'methods' => 'GET',
'callback' => 'ep_autosuggest'
] );
} );
The callback looks like this
function ep_autosuggest( $data ) {
// Elasticsearch PHP Client
$client = ClientBuilder::create()->build();
$params = [
'index' => 'index',
'type' => 'post',
'body' => $data
];
$response = $client->search( $params );
return $response;
}
The different parts work as they should. I'm struggling with getting the data from the passed object. Any ideas?
After some inspecting the WP_REST_Request, it turned out, that the get_body()
method was the one I'm looking for. Anyhow, this is what I ended up with:
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;
}
For anyone interested, I made a plugin out of it:
https://github/grossherr/elasticpress-autosuggest-endpoint
Thanks for the plugin Nicolai! Just wanted to point out a couple of things that weren't clear to me:
Once the plugin is installed, modify 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()
];
Then, use http(s)://yourdomainname/wp-json/elasticpress/autosuggest/ (or whatever is specified in register_rest_route()) as the endpoint URL in the admin / ElasticPresss / Autosuggest / Settings.
jQuery.ajax
call. What other data do you want to send, and at what stage? – janh Commented Jan 25, 2018 at 8:06