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

Tags de búsquedas:

queson los carateres eb una contraseña,sphinx acentos,sphinx ñ,sphinx utf8,uso de tildes sphinx

Noticias relacionadas »

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

  1. Pedro Hernández
    / Responder

    Muchas gracias, muy útil ese charset

  2. Nahuel
    / Responder

    Muchas gracias! me estaba volviendo loco con esto! Muy útil! saludos!

  3. / Responder

    luego de mucho buscar, la solución mas sensilla y rápida es generar una tabla nueva con los registros a buscar y el campo principal convertirlo a ascii (por ejemplo uso la clase inflection de fuelphp) y a partir de aqui ya indexo todo son acentos. Luego filtro los parametros de busqueda de la misma manera y el match es perfecto.
    Saludos

    • Pedro Ventura
      / Responder

      Y que pasa si tienes una tabla que pesa muchísimo y que tiene demasiado contenido como para volver a indexarlo nuevamente? Luego donde buscas? sobre la original y la nueva o solo la nueva?

      te digo que así a bote pronto me suena a un parche, aunque no descarto que tu solución pueda ser la mejor, pero no la veo, es que eso de “una nueva tabla con los registros a buscar”, y cuales son los registros a buscar? Todos los que tengan acento? o cuales.

      De todas maneras Pablo muchas gracias por tu comentario, aunque si lo pudieras explicar con más detalle y argumento sería mucho mejor!

      Un saludo!

  4. Olga
    / Responder

    Una pregunta Pedro,

    ¿cómo puedo imprimir o comprobar el valor del campo weight de cada uno de los resultados que me devuelve el sistema al hacer una búsqueda con Sphinx? Muchas gracias

  5. Javi
    / Responder

    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!

  6. JoeZ99
    / Responder

    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.

    • Pedro Ventura
      / Responder

      Me alegro de que te haya ayudado!!
      Un saludo!

  7. Luis
    / Responder

    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

    • / Responder

      Pues eso es porque se me ha “colado”. He incluido la configuración standar de los charset utf8 que viene en la web de Sphinx.
      http://www.sphinxsearch.com/docs/current.html#conf-charset-type
      que son para ingles y Ruso (y lenguas de origen cirilico). Pero que vamos no nos sirve para nada, a menos que quiera sacar una versión de mi web en Ruso.
      Pero tampoco me molesta por estar ahí!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  • marcelino (3 días)
    Os dejo un grupo donde opera uno de los trader…
  • Pedro Ventura (2 semanas)
    Hola Pablo, Creo que puedes configurar los códigos de adsense…
  • Pedro Ventura (2 semanas)
    Buenas, El proveedor cierra facturación el día 10 de cada…
  • pedro (4 semanas)
    Hola pero este sitio paga o no paga , ya…
  • Pedro (1 mes)
    Buenos días Margherita El plugin está obsoleto y ya no…
  • Juan Carlos Díaz (1 mes)
    Este grupo de Telegram me ha dado muy buenas señales…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
htaccess redireccionamiento con barra a sin barra

Para eliminar la barra delante de la url tipo: www.pedroventura.com/blog_programacion/ y dejarlo www.pedroventura.com/blog_programacion insertar este código en el .htaccess afectará...

Cerrar