elasticsearch - aws - Definición de analizador al consultar en elásticoBúsqueda
elasticsearch tutorial (3)
Soy bastante nuevo en elasticsearch y solo necesito algunas aclaraciones: ¿Podemos definir un analizador mientras consultamos el servidor de búsqueda? Lo intenté con la consulta de "texto" y "campo" y funciona bien:
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 la consulta término / prefijo / comodín obtengo 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 como que no podemos definir analayzers mientras consultamos el servidor elásticosearch para algún tipo de consultas y para otros que podemos? Si no, ¿estoy haciendo algo mal?
Cualquier ayuda es muy apreciada.
Esta sintaxis funcionó para mí:
GET /_search
{
"query": {
"match_phrase": {
"controller": {
"analyzer": "keyword",
"query": "api/v2/test"
}
}
}
}
Encuentra más detalles en la documentation .
Las consultas de term
, prefix
y wildcard
esperan que el valor especificado en la consulta ya se haya analizado.
Puede configurar un search-analyzer personalizado para usar en consultas.
De los documentos:
Por lo general, el mismo analizador debe aplicarse en el momento del índice y en el tiempo de búsqueda, para garantizar que los términos en la consulta estén en el mismo formato que los términos en el índice invertido.
A veces, sin embargo, puede tener sentido utilizar un analizador diferente en el momento de la búsqueda, como cuando se usa el análisis-edgengram-tokenizer para autocompletar.
De forma predeterminada, las consultas usarán el
analyzer
definido en la asignación de campo, pero esto puede ser anulado con la configuraciónsearch_analyzer
Los documentos también enumeran un ejemplo. search-analyzer