Soy bastante nuevo en elasticsearch y solo necesito algunas aclaraciones: ¿Podemos definir un analizador mientras consultamos el servidor de búsqueda? Lo he probado con el "texto" y consulta "campo" y funciona bien:Definición de analizador al realizar consultas en elásticoBuscar
Consulta:
curl -XPOST http://localhost:9200/test/user/_search? -d '{ "query" : {
"text" : {"_all" : {"query" :"Vaibhav","analyzer" :
"lowercase_keyword" }} } }'
Resultado:
{"took":144,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.10848885,"hits":{"_index":"test","_type":"user","_id":"1","_score":0.10848885,
"_source" : {
"first_name": "Vaibhav",
"last_name":"saini",
"password":"pwd"
Pero cuando trato de hacer lo mismo con plazo/prefijo/consulta comodín consigo la excepción:
consulta:
curl -XPOST http://localhost:9200/test/user/_search? -d '{
"query" : { "term" : {"_all" : {"query" :"Vaibhav","analyzer" :
"lowercase_keyword" }} } }'
Resultado:
{"error":"SearchPhaseExecutionException[Failed to execute phase [query], total failure; shardFailures
{[kws9J6tbQtWCMNKBm3Gpkw][test][4]: SearchParseException[[test][4]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}{[kws9J6tbQtWCMNKBm3Gpkw][test][1]: SearchParseException[[test][1]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}{[kws9J6tbQtWCMNKBm3Gpkw][test][2]: SearchParseException[[test][2]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}]","status":500}
Entonces, ¿es que no podemos definir analayzers al consultar el servidor elasticsearch por algún tipo de consultas y para los demás podemos? Si no, ¿estoy haciendo algo mal?
Cualquier ayuda es muy apreciada.
El documento elasticsearch dice que la consulta de términos coincide con documentos que tienen campos que contienen un término (no analizado). http://www.elasticsearch.org/guide/reference/query-dsl/term-query.html – vaibhav
Gracias Imotov. Pero tengo una duda aquí, si este es el caso, entonces en el ejemplo anterior, mientras consulto, debería obtener el resultado independientemente de qué carcasa estoy usando. Por ejemplo, en mi índice de datos en el campo "primer nombre" es "Vaibhav", también el analizador utilizado para este campo es un analizador personalizado que utiliza tokenizer como "Palabra clave" y filtro como "minúscula", por lo que mis datos se indexan como "vaibhav" en lugar de "Vaibhav", que es como se esperaba. –
Ahora cuando lo consulto utilizando una consulta de término/prefijo/comodín en "vaibhav" obtengo el resultado, pero cuando lo consulto en "Vaibhav" no obtengo el resultado (tal vez porque está indexado como "vaibhav") . Entonces, mi requisito aquí es que mi consulta sea insensible a mayúsculas y minúsculas. gracias –