Ordenación en la búsqueda

cancel
Showing results for 
Search instead for 
Did you mean: 
spilby
Active Member II

Ordenación en la búsqueda

Buenas,

estoy intentando ordenar los resultados que he obtenido tras una búsqueda con Lucene.

Query query = new Query(Constants.QUERY_LANG_LUCENE, sQuery);
QueryResult queryResult = repositoryService.query(store, query, false);
     
// Recogemos los resultados de la consulta
ResultSet results = queryResult.getResultSet();
rows = results.getRows();

Cada row tiene un score asociado que se puede recuperar haciendo un row.getScore().

El problema es que la puntuación de ese score, o no la entiendo, o va como quiere. (Prefiero pensar que es lo primero)

Tengo 4 ficheros subidos en alfresco, cada uno con la palabra "hit" repetida varias veces. Lo lógico es que a más coincidencias (en la query busco la palabra "hit") mayor score, pero os paso el score que me devuelve para cada fichero:

- Prueba 1.txt (una sola palabra "hit") -> score = 1.0

- Prueba 2.txt (hit hit) -> score = 0.9847

- Prueba 3.txt (hit hit hit) -> score = 0.9824

- Prueba 4.txt (hit repetida 10 veces) -> score = 0.9984

No le veo ningún sentido. El score mayor es el que sólo tiene una vez la palabra "hit"? Y el menor es el que la tiene 3 veces? No entiendo nada…

¿Hay que especificar de alguna manera en la query la asignación que debe darle Alfresco al score? ¿Habéis implementado alguno algo parecido? Para saber cómo ordenar los resultados de mayor a menor número de coincidencias con la palabra a buscar.

Merci!
1 Reply
cybermakoki
Member II

Re: Ordenación en la búsqueda

Prueba a utilizar algo como esto:

 SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.addSort(ContentModel.PROP_CREATED.toString(), true);
sp.setQuery(query);
sp.addStore(Repository.getStoreRef());

results = getSearchService().query(sp);


el método addSort te ordena por la propiedad que le digas y en ascendente o descendente