¿Cómo ordena Lucene por grado de coincidencia?
Si observamos el constructor predeterminado de Sort, las dependencias son una combinación de SortField.FIELD_SCORE y SortField.FIELD_DOC.
Código Java
/**
* Ordenar por relevancia calculada. Esto es lo mismo que llamar a
* {@link Searcher#search(Query) Searcher#search()} sin una condición de clasificación,
* sólo que un poco más caro.
Entonces, ¿cómo construimos el SortField requerido? Eche un vistazo al constructor de SortField, que tiene un parámetro inverso que nos permite reordenar el conjunto de resultados.
Código Java
/** Crea una clasificación (posiblemente una clasificación inversa) basada en los términos del campo dado y proporciona explícitamente el tipo del valor del término
*. * Puede ser null
si
* type
es SCORE o DOC.
* @param tipo términos de valores.
* @param inversa Verdadero si el orden natural debe invertirse.
*/
public SortField (campo de cadena, tipo int, booleano inverso) {
this.field = (campo! = nulo) ? () : campo;
this.type = tipo;
this.reverse = reverso;
}
Como puedes ver , Solo necesitamos construir un SortField [] para lograr la función que queremos, consulte:
código java
// Clasificación en orden descendente, el siguiente índice cuando las calificaciones son lo mismo Al frente
new SortField[] { SortField La primera fila indexada después del mismo tiempo, jaja, esta es la primera fila más irrelevante, bastante interesante
new SortField[ ] { nuevo SortField(null, SortField.SCORE, true), new SortField(null, SortField.DOC, true) }
new SortField[] { new SortField(null, SortField.SCORE, true), new SortField(null, SortField.DOC, true) }
Oh, simplemente pase este SortField[] como parámetro al constructor de Sort para obtener una instancia de Sort, y luego pase esta instancia a searcher.search(query,sort) para obtener los resultados deseados.