2011-04-26 22 views
7

Estoy buscando un motor de búsqueda de documentos (como Xapian, Whoosh, Lucene, Solr, Sphinx u otros) que es capaz de buscar términos parciales.Búsqueda de documentos en palabras parciales

Por ejemplo cuando se busca el término "Brit" el motor de búsqueda debe devolver documentos que contengan cualquiera "Britney" o "Gran Bretaña" o en general cualquier documento que contenga una palabra coincidente r *brit*

tangencial, me di cuenta de la mayoría de los motores use TF-IDF (frecuencia de término-frecuencia de documento inverso) o sus derivados que se basan en términos completos y no en términos parciales. ¿Existen otras técnicas que se hayan implementado con éxito además de TF-IDF para la recuperación de documentos?

+0

Le recomiendo que agregue una etiqueta de motor de búsqueda a su pregunta, lucene, Xapian, o al menos motor de búsqueda. La búsqueda es una etiqueta general, las personas que están en los motores de búsqueda pueden cansarse de leer todo tipo de solicitudes extrañas para preguntas no relacionadas con los motores de búsqueda. ¡Buena suerte! – shellter

+0

Gracias por el refugio de sugerencias. Se agregaron más etiquetas. – GeneralBecos

+1

Cualquier razón por la que no haya leído la documentación de los diferentes motores. Lucene (y, por lo tanto, Solr) admite búsquedas con comodines: http://wiki.apache.org/lucene-java/LuceneFAQ#What_wildcard_search_support_is_available_from_Lucene – ewh

Respuesta

11

Con Lucene que sería capaz de implementar esto de varias maneras:

1.) Puede utilizar comodines consultas *brit* (Usted tendría que configurar su analizador de consultas para permitir que conduce comodines)

2 .) Puede crear un campo adicional que contenga N-Grams of all the terms. Esto daría como resultado índices más grandes, pero sería en muchos casos más rápido (velocidad de búsqueda).

3.) Puede usar la búsqueda difusa para manejar errores de tipeo en la consulta. p.ej. alguien tipeó britnei pero quería encontrar britney.

Para consultas con comodines y búsqueda difusa eche un vistazo a query syntax docs.

+0

¿Cómo se puede usar "*" al principio de la consulta? – SomethingSomething

+2

Tiene que decirle al analizador de consultas que permita este tipo de consultas. Use la función setAllowLeadingWildcard para hacer eso. https://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#setAllowLeadingWildcard(boolean) – csupnig

Cuestiones relacionadas