Entrada

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.

1
sql_query_pre = SET NAMES utf8
Esta entrada está licenciada bajo CC BY 4.0 por el autor.