2010-08-30 34 views
7

necesito hacer consultas en mi índice lucene. Actualmente Lucene permite no sólo cuando tenemos dos o más términos en la consulta:no consulta en lucene

Así que puede hacer algo como:

country:canada not sweden 

pero no se puede ejecutar una consulta como:

country:not sweden 

Podría usted por favor, hágamelo saber si hay alguna solución eficaz para este problema

Gracias

Respuesta

1

La respuesta corta es que esto no es posible usando el Lucene estándar.

Lucene no permite las consultas NOT como un único término por la misma razón que no permite las consultas de prefijo: para llevar a cabo cualquiera, el motor debería buscar en cada documento para determinar si el documento es/no es un éxito. Tiene que mirar a través de cada documento porque no puede usar el término de búsqueda como la clave para buscar documentos en el índice invertido (utilizado para almacenar los documentos indexados).

para llevar su caso como ejemplo:

Para buscar not sweden, el enfoque más simple (y posiblemente más eficiente) sería la de buscar sweden y luego "invertir" el conjunto de resultados a devolver todos los documentos que no están en ese conjunto de resultados. Hacer esto requeriría encontrar todos los documentos requeridos (es decir, no en el conjunto de resultados) en el índice, pero sin una clave para buscarlos. Esto se haría al iterar sobre los documentos en el índice, una tarea para la que no está optimizado y, por lo tanto, la velocidad sufriría.

Si realmente necesita esta funcionalidad, puede mantener su propia lista de elementos al indexar, de manera que se convierte en una búsqueda not sweden una búsqueda sweden utilizando Lucene, seguida de una inversión de los resultados utilizando el conjunto de elementos.

16

Una respuesta muy tarde, pero que podría ser útil para alguien más tarde:

*:* AND NOT country:sweden 

si no me equivoco esto debería hacer una lógica "Y" con todos los documentos y los documentos con un país que es diferente de "Suecia".

1

Bien, veo lo que estás tratando de hacer.

Puede utilizarlo como un refinamiento de consulta ya que no hay operadores booleanos únicos en Lucene. A pesar de las respuestas anteriores, creo que este es un enfoque mejor y más adelante (nota del espacio antes del comodín):

&query= *&qf=-country:Canada