2009/11/17 Facundo Batista <facundobatista@???>
> El problema con tanta información es la búsqueda. Hoy por hoy
> solamente estamos buscando en los títulos de las páginas, y así y todo
> es un problema... porque la mayoría de los esquemas de búsquedas están
> armados por palabras completas (coincidencia exacta), o por parte de
> la palabra, pero siempre comenzando de esa manera (o sea, buscar por
> "cam", encuentra "camino", pero no "videocámara"). Creo firmemente en
> que la búsqueda debería permitir coincidencias parciales en cualquier
> parte de la palabra.
>
Me dieron permiso para compartir la implementación, así que paso un link al
módulo [0].
Tuve que recortar lo que no era pertinente, así que puede que algo falte, y
eventualmente haré una interfaz que le sirva a la CDPedia, pero al menos
pueden ir leyendo ;-)
Sobre este bicho, se puede armar una solución para el tema de las
subcadenas: explosión del queryset.
Es una técnica común, aunque a veces tiene una degradación de performance
molesta.
La técnica tiene dos partes.
Por un lado, el lexer, cuando me piden "camion", genera un término canónico
"camion" para las palabras "camiones", "camioncito", etc, etc... Esto quiere
decir que todos los términos equivalentes a "camión" se indexan bajo un
único término, "camión".
Esto no está en el paquete que subo, porque realmente está desperdigado por
mucho código, y me cuesta bastante separarlo - pero voy a buscar el código
pertinente y lo voy a subir eventualmente. Igual, hay lexers opensource.
La otra parte de la técnica es la que le da el nombre: cuando se procesa un
request, se lo traduce a:
(term CAMION) and (term ROJ)
(nota: ROJ es el lexema de ROJO, que se aplica a ROJO, ROJOS, ROJA, ROJAS,
etc)
Supongamos que tengo un término SUPERCAMIÓN - querría que mi query también
lo incluya.
Itero todos los términos mencionados, y los expando a un OR de
equivalencias:
(term CAMION, SUPERCAMION, MINICAMION) and (term ROJ, ARROJ, ...)
Eso tendríamos que hacer - ¿les va intentar esto, o intentamos con el árbol
de sufijos?
La ventaja de esta técnica es que tiene índices muy compactos - el árbol de
sufijos no tanto.
La otra ventaja es que se puede construir mucho sobre este índice - por
ejemplo, ranking según relevancia - sobre un árbol de sufijos no tanto.
[0]
http://www.deeplayer.com/claudio/misc/property_index.tar.gz