for php curl elasticsearch

for - consulta de búsqueda elástica y cURL en PHP



kibana php (4)

He estado usando la biblioteca Elastica PHP para mis interacciones elasticsearch:

https://github.com/ruflin/Elastica

Tenía una curva de aprendizaje muy corta. Aquí hay un ejemplo:

$client = new Elastica_Client(); $index = $client->getIndex(''idx_occurrence''); $index->getType(''Occurrence''); $query_string = new Elastica_Query_QueryString(''Plantae''); $query_string->setFields(array(''kingdom_interpreted'')); $query = new Elastica_Query($query_string); $index->refresh(); $searchResults = $index->search($query);

Esto ilustra una búsqueda Cadena de consulta limitada a un campo específico. $searchResults es una matriz de objetos Elastica_ResultSet . Me gusta Elastica porque abstrae cualquier problema relacionado con cURL.

Estoy empezando con elasticsearch. Quiero consultar utilizando cURL en php.

Este código no da nada ... (vea el error a continuación si ejecuto desde la línea de comandos. No estoy seguro de que este error sea causado por los saltos de línea en la consola ...)

$url = "curl -s -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search -d '' { ''filtered'' : { ''query'' : { ''term'' : { ''kingdom_interpreted'' : ''Plantae'' } } } }'' "; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); $return=curl_exec($ch); var_dump($return);

pero si uso esta url, http://<my_url>:9200/idx_occurrence/Occurrence/_search?q=kingdom_interpreted:Plantae

luego obtengo los resultados de cURL.

¿Tal vez el filtro de consulta es incorrecto? (Probé varias opciones sin éxito)

ERROR: {"error": "SearchPhaseExecutionException [Error al ejecutar la fase [consulta], falla total; shardFailures {[AS6HqxgNRtyU9-pQKhJsXQ] [idx_occurrence] [3]: SearchParseException [[idx_occurrence] [3]: from [-1], size [-1]: Parse Failure [Falló al analizar el origen [/ n {/ n filtered: {/ n query: {/ n term: {kingdom: Plantae} / n} / n} / n}]]]; anidado : SearchParseException [[idx_occurrence] [3]: from [-1], size [-1]: Parse Failure [No hay analizador para el elemento [filtrado]]];} {[AS6HqxgNRtyU9-pQKhJsXQ] [idx_occurrence] [2]: SearchParseException [[idx_occurrence] [2]: from [-1], size [-1]: Parse Failure [Falló al analizar el origen [/ n {/ n filtered: {/ n query: {/ n term: {kingdom: Plantae} / n} / n} / n}]]]; anidado: SearchParseException [[idx_occurrence] [2]: from [-1], size [-1]: Parse Failure [No hay analizador para el elemento [filtrado]]];} ] "," estado ": 500}


He encontrado una respuesta yo mismo a parte de la pregunta. Logré obtenerlo por línea de comando.

curl -XGET my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d ''{ "query": { "query_string" :{"fields" : ["kingdom_interpreted"], "query": "Plantae" } } }''

el uso de PHP para ejecutar la solicitud (correcta) de cURL solo devuelve una cadena vacía. No hay errores en los registros de PHP.

$url=''curl -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search?pretty=true -d /'{ "query": { "query_string" :{ "fields" : ["kingdom_interpreted"], "query": "Plantae" } } }/'''; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); ob_start(); curl_exec ($ch); curl_close ($ch); $data = ob_get_contents(); ob_end_clean(); var_dump($data);

De nuevo, si en lugar de este $ url le envío esta URL my_url: 9200 / idx_occurrence / Occurrence / _search? Q = kingdom_interpreted: Plantae

Funciona. ¿Por qué?


$search = ''Plantae''; //search query $fields = ''kingdom_interpreted''; //fields to look in $results = file_get_contents(''http://server:port/idx_occurrence/Occurrence/_search?q=''.$search.''&fields=''.$fields);


esta es una demo de solicitud simple:

$param = " { ''filtered'' : { ''query'' : { ''term'' : { ''kingdom_interpreted'' : ''Plantae'' } } } }"; $header = array( "content-type: application/x-www-form-urlencoded; charset=UTF-8" ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://xxxxx:9200/idx_occurrence/Occurrence/_search"); curl_setopt($curl,CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $param); $res = curl_exec($curl); curl_close($curl); return $res;