2011-07-27 24 views
5

Quiero hacer búsqueda de subcadenas generales entre miles de millones de cadenas. El requisito es un poco diferente de la búsqueda de texto completo porque quiero que una consulta "ubst" también pueda presionar "substr".¿Crear un índice para la búsqueda de subcadenas?

¿Lucene o Sphinx son capaces de hacer esto? Si no, ¿cuál es la mejor manera de hacerlo?

Respuesta

0

Lucene es una de las mejores opciones disponibles. Lucene admite la búsqueda de cadenas secundarias, por lo que ubst devolverá substr.

echa un vistazo a http://wiki.apache.org/lucene-java/LuceneImplementations para la implementación del lenguaje adecuado.

+0

Gracias, pero parece que Lucene no tiene índice sobre eso. –

3

La mejor estructura de índice para este caso es suffix tree Lucene no implementa este tipo de índice por lo que su búsqueda de subcadenas es lenta. Pero lucene tiene índice de árbol de prefijo, lo que significa que puede hacer una búsqueda rápida si busca términos por su prefijo.

+0

Gracias. He creado una matriz de sufijos yo mismo. –

0

Sphinx Server admiten búsquedas eficaces subcadena desde la versión 2.0.1-beta 22 de Abril 2011. Por desgracia a partir de hoy este respecto sólo son compatibles con las versiones beta, como se ha mencionado here.

Hice una prueba con la versión beta 2.1.1. Parece que funciona correctamente Consulte el manual entry para ver el tipo de diccionario, lea sobre el tipo keywords.

Cuando traté de usar 2.0.6 versión de lanzamiento, cayó de nuevo a índice de CRC ineficiente, dando la siguiente advertencia durante la indexación:

WARNING: min_infix_len is not supported yet with dict=keywords; using dict=crc 

mi archivo de configuración mínima:

source sour 
{ 
    type = xmlpipe2 
    xmlpipe_command = type C:\Temp\1\sphinx\input.xml 
} 

index inde 
{ 
    source = sour 
    path = testpa 
    enable_star = 1 
    dict = keywords 
    charset_type = utf-8 
    min_infix_len = 1 
} 
Cuestiones relacionadas