Analyzers en Lucene.Net
En este post estábamos viendo la integración de Lucene.Net con NHibernate mediante NHibernate Search.
Lucene puede indexar texto desde muchas fuentes: PDF, HTML, Documentos de Word entre los más conocidos y esto es lo que hace a Lucene muy usado por muchas aplicaciones reales para solucionar problemas de búsqueda. Luego que Lucene parsea los documentos desde un medio rico, debe convertir este stream en un formato de tokens de texto plano para que los pueda digerir y así indexar el contenido. El paso previo a la indexación es el análisis, y para esto se utilizan Analyzers. Lucene provee algunas clases que se pueden utilizar por ejemplo: WhitespaceAnalyzer que se encarga de tokenizar el texto sin tener en cuenta los espacios en blanco; StopAnalyzer que elimina las StopWords en Inglés del texto para poder indexarlo, por ejemplo: the, an, a, that, this, entre otras.
Usando NHibernate Search, podemos realizar consultas contra los índices que mantiene Lucene, ya sea en Memoria o en el propio sistema de archivos. Este es un ejemplo de una consulta usando NHibernate Search:
QueryParser qp = new QueryParser("Summary", new StopAnalyzer()); IQuery NHQuery = s.CreateFullTextQuery(qp.Parse("series"), typeof(Book)); IList result = NHQuery.List();
QueryParser recibe como parámetro un Analyzer, en este caso StopAnalyzer. Utilizando este Analyzer, Lucene encuentra los términos de búsqueda dentro del texto de búsqueda. Esto no tiene nada que ver con el Analyzer que se configura Lucene al comienzo, que indica la manera en que se van a filtrar los tokens que van almacenarse al Index. Este analyzer realiza un filtro en el string de búsqueda para encontrar las keywords de referencia a buscar.
Para entender un poco más sobre los Analyzer, realicé esta aplicación de consola basado en los ejemplos en Java de Lucene In Action, bueno… en realidad solo fue una traducción de Java a C# de los ejemplos que había. La idea es probar que tokens de salida producen distintos Analyzers ante una entrada de texto:

En este ejemplo utilicé dos analyzer de Lucene y uno personalizado a unas cuantas Stop Words del Español: SpanishStopAnalyzer. El programa que utilicé para correr ejemplo pueden hacer un checkout de aquí.
2 Responses to Analyzers en Lucene.Net
Leave a Reply Cancel reply
-
Categories
- .NET
- ActiveRecord
- agil
- Alt.Net
- AOP
- Asp.net MVC
- blog
- C#
- codegeneration
- cosas interesantes
- db4o
- db4o-analyzer
- DLR
- enterprise-library
- expresiones regulares
- General
- Hibernate
- IoC
- it
- Java
- LINQ
- Linux
- Lucene
- Mocking
- Mono
- monosms
- MVC
- NAnt
- NHibernate
- NHibernate.Burrow
- NHibernate.Contrib
- NHibernate.Validator
- noticias
- O/R Mapping
- Open Source
- patrones
- personal
- podcast
- programación
- Redes Neuronales
- Refactoring
- regex
- Scrum
- Security
- Shards
- Sin Categoría
- Spring
- SqlServer
- Testing
- tips
- Tool
- tutorial
- Ubuntu
- uNHAddIns
- video
- Virtualización
- Visual Basic.Net
- Visual Studio
- VMWare
- Web
-
Articles
- June 2011
- May 2011
- November 2009
- October 2009
- April 2009
- March 2009
- February 2009
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
-
Meta





Darío, excelente post, me fue muy util para un proyecto que estoy realizando actualmente. El único inconveniente que tengo es estoy bajando los frameworks q linkeas y no esta la librería nhibernate.search.dll, ¿me esta faltando bajar algo mas?
Si bajás este ejemplo vas a encontrar la librería que buscas:
http://darioquintana.googlecode.com/files/NHibernateSearch-Demo.7z