tutorial query example lucene

query - Orden exacto Lucene



lucene vs elasticsearch (3)

dlamblin, déjame ver si entiendo esto correctamente: quieres hacer una consulta basada en el prefijo, y luego ordenar los resultados por población, y quizás combinar el orden de clasificación con preferencia para las coincidencias exactas. Le sugiero que separe la búsqueda de la clasificación y use un CustomSorter para la clasificación: aquí hay una entrada de blog que describe un clasificador personalizado . El libro clásico de Lucene lo describe bien.

He tenido este problema a largo plazo en no entender bien cómo implementar un tipo decente de Lucene o clasificación. Supongamos que tengo una lista de ciudades y sus poblaciones. Si alguien busca "nuevo" o "londres", quiero la lista de coincidencias de prefijo ordenadas por población, y tengo que trabajar con una búsqueda de prefijo y una clasificación por campo invertida, donde hay un campo de población, IE New Mexico, New York ; o Londres, Londonderry.

Sin embargo, también siempre quiero que el nombre coincidente exacto esté en la parte superior. Entonces, en el caso de "Londres", la lista debe mostrar "Londres, Londres, Londonderry", donde el primer Londres está en el Reino Unido y el segundo Londres en Connecticut, incluso si Londonderry tiene una población más alta que London CT.

¿Alguien tiene una sola solución de consulta?


API para

Sortcomparator

dice

Hay un Comparable distinto para cada término único en el campo: si algunos documentos tienen el mismo término en el campo, la matriz de caché tendrá entradas que hacen referencia a la misma comparación.

Puedes aplicar un

FieldSortedHitQueue

al sortcomparator que tiene un campo Comparador para el cual la API dice ...

Almacena un comparador correspondiente a cada campo que se ordena por.

Por lo tanto, el término puede ordenarse en consecuencia


Mi solución actual es crear un buscador exacto y un buscador de prefijos, ambos ordenados por población inversa, y luego copiar todos mis hits a partir de los hits exactos, pasando a los hits del prefijo. Hace que la búsqueda de mis resultados sea un poco más molesta de lo que creo que debería ser.

También utilicé un hash para eliminar duplicados pero luego cambié el buscador de prefijos a una consulta booleana de una búsqueda de prefijo (DEBE) con una búsqueda exacta (NO DEBE), para que Lucene elimine los duplicados. Aunque esto parecía aún más derrochador.

Editar : Movido a un comentario (ya que la función ahora existe): Yuval F Gracias por tu publicación en el blog ... ¿Cómo sabría el comparador de clasificación que el campo de nombre "london" coincide exactamente con el término de búsqueda "london" si no puede acceder el término de búsqueda?