Problema con icu_normalizer

14 views
Skip to first unread message

Mariano G Consoni

unread,
Jun 14, 2017, 1:13:05 PM6/14/17
to Elasticsearch ES
Buenas, antes que nada les cuento que soy muy nuevo con ES, asi que es probable que cometa errores en lo que pregunto.

Uso la version 1.7 de ES (es la que se usa en mi trabajo, estamos trabajando para cambiarla pero por el momento no se puede).
Tengo un problema usando un char_filter, estas son las definiciones del filter, analyzer y mapping:

"char_filter": {
   
"nfkc_normalizer": {
       
"name": "nfkc",
       
"type": "icu_normalizer"
   
}
}

"analyzer": {
         
"exact_analyzer": {
             
"type": "custom",
             
"tokenizer": "keyword",
             
"char_filter": "nfkc_normalizer"
           
}
     
}


"location": {
               
"type": "string",
               
"index": "no",
               
"fields": {
                 
"exact": {
                   
"type": "string",
                   
"term_vector": "with_positions_offsets",
                   
"analyzer": "exact_analyzer"
                 
}....

No pongo todo el attributo 'location', solo donde usa el filtro. El problema es el siguiente; si analizo un texto con un acento agudo (´), el acento es "mergeado" con el caracter que sigue.
POST /_analyze?analyzer=exact_analyzer

Body: asdf´ghjk

Respuesta:
{
 
"tokens": [
   
{
     
"token": "asdf ́ghjk",
     
"start_offset": 0,
     
"end_offset": 9,
     
"type": "word",
     
"position": 1
   
}
 
]
}
Segun la documentacion, los filtros se aplican a las busquedas, entonces esto no seria un problema.
Esta busqueda funciona:

POST /_search
{
   
"query": {
       
"match": {
           
"photo_trips.location.exact": {
               
"query": "asdf´ghjk"
           
}
       
}
   
}
}


Pero esta no, salvo que use el texto que devuelve el analyzer (con el caracter mergeado).
{
   
"size": 1000,
   
"from": 0,
   
"query": {
       
"filtered": {
           
"query": {
               
"bool": {
                   
"minimum_should_match": 1,
                   
"must": [
                       
{
                           
"terms": {
                               
"photo_trips.location.exact": [
                                   
"asdf´ghjk"
                               
]
                           
}
                       
}
                   
]
               
}
           
}
       
}
   
}
}


Alguno se le ocurre porque la segunda busqueda no esta pasando por el analyzer?

Encontre que usando el char_filter con el tipo nfc en lugar de nfkc funciona bien.  Pero no encuentro la razon y en que puede perjudicar este cambio.

Alguna idea?

Muchas gracias!













Reply all
Reply to author
Forward
0 new messages