Pregunta

He tenido este problema a largo plazo al no entender bien cómo implementar una clasificación o clasificación decente de Lucene.Digamos que tengo una lista de ciudades y sus poblaciones.Si alguien busca "nuevo" o "londres", quiero la lista de coincidencias de prefijos ordenadas por población, y la tengo trabajando con una búsqueda de prefijo y un campo de clasificación invertido, donde hay un campo de población, es decir, Nuevo México, Nueva York. ;o Londres, Londonderry.

Sin embargo, también quiero que el nombre exacto coincida siempre en la parte superior.Entonces, en el caso de "Londres", la lista debería mostrar "Londres, Londres, Londonderry", donde el primer Londres está en el Reino Unido y el segundo Londres está en Connecticut, incluso si Londonderry tiene una población mayor que Londres CT.

¿Alguien tiene una solución de consulta única?

¿Fue útil?

Solución

dlamblin, déjame ver si entiendo esto correctamente:Desea realizar una consulta basada en prefijos y luego ordenar los resultados por población y tal vez combinar el orden de clasificación con preferencia por coincidencias exactas.Le sugiero que separe la búsqueda de la clasificación y utilice un CustomSorter para la clasificación:Aquí está una entrada de blog que describe un clasificador personalizado. El libro clásico de Lucene describe bien esto.

Otros consejos

API para

comparador de clasificación

dice

Hay un distinto comparable 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 comparable.

Puedes aplicar un

CampoOrdenadoHitQueue

al comparador de clasificación que tiene un campo Comparador para el cual la API dice...

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

Por lo tanto, el término se puede ordenar 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 todas mis visitas comenzando por las visitas exactas y pasando a las visitas de prefijo.Hace que paginar mis resultados sea un poco más molesto 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 post en el blog ...¿Cómo sabría el comparador de clasificación que el campo de nombre "Londres" coincide exactamente con el término de búsqueda "Londres" si no puede acceder al término de búsqueda?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top