2010-09-15 18 views
25

Lucene query vs filter?Lucene: ¿Cuál es la diferencia entre Query y filtro

Ambos hacen cosas similares a los filtros de término por valor de término, filtro supongo que existe para un propósito similar.

¿Cuándo utilizarías el filtro y cuándo la consulta?

Sólo a partir del Lucene hoy para tratar de aclarar el concepto

Respuesta

8

Un Query se puede pasar a un Searcher para buscar documentos. Un Filter no puede; solo puede modificar los resultados producidos por un Query.

La implementación de un nuevo tipo Query es bastante complicado, y requiere una comprensión de la relación de los componentes internos de Lucene como Weight, Scorer y Similarity. Una implementación de Filter podría ser bastante simple y no interactuar con el IndexReader en absoluto.

+0

Aunque lo que dices es correcto en principio, los filtros también se pueden pasar a los buscadores pero funcionan por separado para las consultas – Khash

+0

@ Khash No estoy seguro de lo que quieres decir. Si está diciendo que las instancias de 'Filter' se pueden pasar a' Searcher' (o ahora simplemente 'IndexSearcher'), eso es cierto, pero solo junto con' Query' o algún otro criterio de búsqueda. Ellos no trabajan solos. – erickson

17

El filtro no afecta el cálculo de la puntuación de los documentos no filtrados.

Por ejemplo imaginar los siguientes documentos:

1. 
loc: "uk", "london" 
text: "i live in london, "london is the best" 

2. 
loc: "london avenue", "london street", "london" 
text: "I like the shop in london st." 

ahora digamos que lo hace la siguiente consulta:

q=+loc:"london" +text:"london" 

en esta consulta la puntuación del documento 2 es mayor que la del documento 1 (porque loc se calcula en la puntuación de documentos)

usando un filtro:

q=+text:"london" f=+loc:"london" 

en esta consulta la puntuación del documento 1 es mayor que la del doc 2.

excusa el formato de estilo Solr pero la idea general es clara.

Otras razones para el uso de filtros son con fines de almacenamiento en caché, los filtros se almacenan en caché por separado de consultas por lo que si usted tiene una consulta dinámica con una parte estática que tendría sentido para filtrar por la parte estática. De esta forma, el recorrido del índice está limitado al subconjunto de documentos filtrados.

0

Después de cerrar una base de datos, la selección del filtro desaparece. Pero cuando cierras una consulta y la vuelves a abrir, seguirá allí.

También puede crear una consulta utilizando un formulario. Pero no puedes usar el filtro en un formulario.

+3

¿De qué forma estás hablando? ¿Por qué no se puede usar un filtro de esa forma? – Dennis

Cuestiones relacionadas