Sphinx configuración. Busquedas con y sin acentos y carácteres utf8

Sphinx configuración. Busquedas con y sin acentos y carácteres utf8

Para aquellos que usen Sphinx como motor de búsqueda en sus aplicaciones y que necesitan realizar búsquedas independientes de los acentos (buscar “jose” y encontrar “jose” y “josé”), también que sea capaz de buscar eñes, les vendrá muy bien la siguiente configuración del charset para español.

charset_table = 0..9, A..Z->a..z, _, -, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, 
U+C7->U+E7, U+E7, 
        U+D1->U+F1, U+F1, 
        U+DD->y, U+FD->y, 
        U+C0->a, U+C1->a, U+C2->a, U+C3->a, U+C4->a, U+C5->a, 
        U+E0->a, U+E1->a, U+E2->a, U+E3->a, U+E4->a, U+E5->a, 
        U+C8->e, U+C9->e, U+CA->e, U+CB->e, 
        U+E8->e, U+E9->e, U+EA->e, U+EB->e, 
        U+CC->i, U+CD->i, U+CE->i, U+CF->i, 
        U+EC->i, U+ED->i, U+EE->i, U+EF->i, 
        U+D2->o, U+D3->o, U+D4->o, U+D5->o, U+D6->o, 
        U+F2->o, U+F3->o, U+F4->o, U+F5->o, U+F6->o, 
        U+D9->u, U+DA->u, U+DB->u, U+DC->u, 
        U+F9->u, U+FA->u, U+FB->u, U+FC->u

        charset_type                            = utf-8

ejemplo de uno de mis index en Sphinx

index mi_indice
{
        source                                  = mi_indice
        path                                    = /path/completo_a_indice/mi_indice
        docinfo                                 = extern

        charset_table = 0..9, A..Z->a..z, _, -, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, 
        U+C7->U+E7, U+E7, 
        U+D1->U+F1, U+F1, 
        U+DD->y, U+FD->y, 
        U+C0->a, U+C1->a, U+C2->a, U+C3->a, U+C4->a, U+C5->a, 
        U+E0->a, U+E1->a, U+E2->a, U+E3->a, U+E4->a, U+E5->a, 
        U+C8->e, U+C9->e, U+CA->e, U+CB->e, 
        U+E8->e, U+E9->e, U+EA->e, U+EB->e, 
        U+CC->i, U+CD->i, U+CE->i, U+CF->i, 
        U+EC->i, U+ED->i, U+EE->i, U+EF->i, 
        U+D2->o, U+D3->o, U+D4->o, U+D5->o, U+D6->o, 
        U+F2->o, U+F3->o, U+F4->o, U+F5->o, U+F6->o, 
        U+D9->u, U+DA->u, U+DB->u, U+DC->u, 
        U+F9->u, U+FA->u, U+FB->u, U+FC->u

        charset_type                            = utf-8
        stopwords                               =/path/completo_a_indice/stopwords.txt
}

ACTUALIZACIÓN (05-04-2010)

Después de mucho pelearme con los acentos y las eñes con Sphinx he conseguido optimizar y dar con el charset adecuado.

 charset_table = 0..9, A..Z->a..z, a..z, 
                                U+DD->y, U+FD->y, 
                                U+D1->n, U+F1->n, 
                                U+C0->a, U+C1->a, U+C2->a, U+C3->a, U+C4->a, U+C5->a, 
                                U+E0->a, U+E1->a, U+E2->a, U+E3->a, U+E4->a, U+E5->a, 
                                U+C8->e, U+C9->e, U+CA->e, U+CB->e, 
                                U+E8->e, U+E9->e, U+EA->e, U+EB->e, 
                                U+CC->i, U+CD->i, U+CE->i, U+CF->i, 
                                U+EC->i, U+ED->i, U+EE->i, U+EF->i, 
                                U+D2->o, U+D3->o, U+D4->o, U+D5->o, U+D6->o, 
                                U+F2->o, U+F3->o, U+F4->o, U+F5->o, U+F6->o, 
                                U+D9->u, U+DA->u, U+DB->u, U+DC->u, 
                                U+F9->u, U+FA->u, U+FB->u, U+FC->u, U+0027

Ejemplo de uno de mis index

index mi_index
{
 source                    = mi_source
 path                    = /path/a/mi/indice/indices/mi_index
 docinfo                    = extern
 mlock = 0
 charset_type = utf-8
 charset_table = 0..9, A..Z->a..z, a..z, 
 U+DD->y, U+FD->y, 
 U+D1->n, U+F1->n, 
 U+C0->a, U+C1->a, U+C2->a, U+C3->a, U+C4->a, U+C5->a, 
 U+E0->a, U+E1->a, U+E2->a, U+E3->a, U+E4->a, U+E5->a, 
 U+C8->e, U+C9->e, U+CA->e, U+CB->e, 
 U+E8->e, U+E9->e, U+EA->e, U+EB->e, 
 U+CC->i, U+CD->i, U+CE->i, U+CF->i, 
 U+EC->i, U+ED->i, U+EE->i, U+EF->i, 
 U+D2->o, U+D3->o, U+D4->o, U+D5->o, U+D6->o, 
 U+F2->o, U+F3->o, U+F4->o, U+F5->o, U+F6->o, 
 U+D9->u, U+DA->u, U+DB->u, U+DC->u, 
 U+F9->u, U+FA->u, U+FB->u, U+FC->u, U+0027
 min_word_len = 1
 html_strip = 0
 stopwords               =/path/a/stopwords/stopwords.txt

}

es muy importante tener las tablas y los datos en las tablas en UTF8 y en el source añadir la siguiente instrucción.

sql_query_pre = SET NAMES utf8

Posts Relacionados:


Te ha ayudado el artículo? Colabora!

5 comentario/s

Comentar

  1. Javi dice:

    Muchas gracias por el charset_table para el config de sphinx… He hecho unas cuantas pruebas y parece que todo ok!

    Lo dicho, muchas gracias y un saludo!

  2. JoeZ99 dice:

    Me has salvado la vida, man. Me estaba volviendo loco probando charset tables. pero hasta que no vi en tu post la entrada sobre set names utf8 no logre nada.

  3. Luis dice:

    Hola,

    No entiendo porque incluyes en la tabla de códigos de caracteres los siguientes:
    U+410..U+42F y U+430..U+44F

    Según he visto en una web son caracteres pertenecientes al alfabeto cirílico.
    Aquí se pueden ver:
    http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024

    Saludos

Deja tu comentario

Nombre:

Email (no será publicado)

Website

Comentario

Colabora, añade +1 a mi blog!!