2009-02-10 9 views
6

Estoy tratando de incorporar Lucene.net en mi búsqueda web.Cómo sacarle más provecho a Lucene.net

Actualmente tengo un índice lucene.net que contiene +1 millón de documentos con 7 campos cada uno. El último campo es el campo "todos" que tiene el contenido de los campos anteriores concatenados. La búsqueda en el campo de todos es EXTREMADAMENTE rápida :)

Pero creo que hay más que se encuentran aquí. ¿Cómo puedo hacer una búsqueda que busque una o más cadenas separadas por espacios en todos los campos sin usar el campo "todos"?
Quiero poder dar pesos a ciertos campos. Además, sería muy bueno si la búsqueda contuviera información sobre DONDE ocurrió el golpe para que pueda mostrarlo en el resultado.

Creo que esto es posible, pero no veo cómo.
¿Alguna ayuda?

Respuesta

3

No creo que necesite mantener un campo "todo".

  1. Eche un vistazo al uso de un "MultiFieldQueryParser". En lugar de tomar un único campo predeterminado para ser utilizado por el analizador de consultas, acepta una matriz de nombres de campo (además del analizador de índices).
  2. El refuerzo de términos debería funcionar de acuerdo con "QueryParser" (es decir, no se requiere ninguna acción especial). Debo añadir que he encontrado que la puntuación estándar me parece correcta (duración del campo, número de coincidencias, etc.) sin utilizar términos potenciados.
  3. Lucene.Net (bueno, ciertamente las compilaciones de SVN 2.3 en este momento) incluyen un puerto del paquete Highlight de la fuente Java. Tiene un par de caprichos (uno de los más importantes es que puede ser complicado empezar), pero básicamente funciona.

Buena suerte

+0

Echaré un vistazo a MultiFieldQueryParser. Gracias –

+0

Parece que usar MultiFieldQueryParser crea una consulta donde mis términos tienen que existir en TODOS los campos consultados. ¿Puedo cambiar esto de alguna manera? –

+0

Dado que aquí no hay ninguna función de PM, ¿tiene alguna sugerencia para mí sobre el paquete de resaltado antes de comenzar a implementarlo? –

1

Tienes que obtener Lucene in Action. Aunque alrededor del original (es Java) aplicación Lucene, que contiene toda la información que necesita: cerca aumenta, marcadores, analizadores, etc. QWERY

+0

Si esto resulta ser la solución que yo creo que es, voy a dftly considerar la obtención de recursos a mí mismo más de Lucene. Parece que esto va a reemplazar todo mi algoritmo de búsqueda hasta el momento. Y no me importa :) –

4

Hacemos algo similar, el truco es especificar campos en la cadena de consulta:

(+Tier1:ribbon^1)^4 OR (+Tier2:ribbon^1)^4 OR (+Tier3:ribbon^1) OR (+Tier4:q*ribbon*^1)^12 

En el ejemplo anterior, el usuario buscó "cinta" en nuestra aplicación. Tenemos diferentes segmentos de datos en diferentes campos, y el campo final "Tier4" contiene todos los términos anteriores concatenados juntos. Nos anteponer el campo con una "Q", por lo que podemos hacer que conduce comodines, también:

(+Tier4:q*ribbon*^1)^12 

Por último, utilizamos aumenta con el símbolo de intercalación (^). Esto termina ponderando las cosas de manera diferente. Tomó un tiempo para aumentar los impulsos, y todavía no estoy 100% contento con ellos, pero sí tienen un gran impacto.

+0

así que si dice (+ Tier1: ribbon^1)^4 esto significa, busca en el campo Tier1 la palabra ribbon y da el resultado de esto un peso de 4? ¿Tiene un recurso sencillo sobre cómo crear cadenas de consulta? –

+0

Es una tontería que los comodines líderes necesiten un truco como el personaje antepuesto. ¿Alguna idea de por qué? –

+0

Tuvimos que ir a la documentación de Java para obtener la información de la cadena de consulta. Además, ten cuidado con muchos términos.Es posible que deba llamar a .setMaxClauseCount(); de lo contrario, se puede lanzar una excepción. –

Cuestiones relacionadas