Ordinamento campi multivalifica SOLR in base ai valori del campo
-
14-11-2019 - |
Domanda
Ho più istanze SOLR con schemi separati.
Ho bisogno di ricevere un campo multivalore in ordine ordinato, ad es.Per tipo: Train_Station, Airport, City_District e così via:
q=köln&sort=query({!v="type:(airport OR train_station)"}) desc
.
Vorrei vedere il tipo di tipo aeroporto prima del tipo di train_station.Per ora sto sempre ottenere il tipo di treno_station in alto.
Come dovrei scrivere la query?
Soluzione
stai ricevendo train_station
s in alto a causa dell'IDF.
Un rapido hack per fissarlo sarebbe quello di utilizzare una query di gamma (che ha il vantaggio di avere punteggi costanti) e la query boosts: q=köln&sort=query({!v="type:([airport TO airport]^3 OR [train_station TO train_station]^2)"}) desc
.
In questo modo, i documenti che hanno airport
nel loro campo di tipo avranno un punteggio di 3, documenti che hanno train_station
nel loro campo avranno un punteggio di 2 e documenti che hanno airport
e train_station
nel loro tipo di campo avranno un punteggiodi 2 + 3= 5 (a una costante moltiplicativa).
Un modo più elegante (ed efficace) di fare questo sarebbe quello di scrivere un parser di query personalizzato (o anche una query di funzione).
Altri suggerimenti
È possibile ordinare solo una funzione solo se restituisce un singolo valore per documento.Sicuramente non puoi ordinare su un campo multivalore o qualsiasi campo che è tokeniato.Sembra che tu abbia bisogno di una funzione che restituisca "aeroporto" se il campo contiene "aeroporto" (anche se contiene "stazione ferroviaria") e "stazione ferroviaria" se contiene "stazione ferroviaria" ma non "aeroporto", quindi ordinasu questo.
Un'altra opzione sarebbe gestire questo al momento dell'indice.Aggiungi un campo chiamato "Airport_train_station_sort" che restituisce 1 se il campo contiene "Aeroporto", 2 se il campo contiene "stazione ferroviaria" ma non aeroporto, e 3 se non contiene né.Quindi semplicemente ordina su quel campo.
Non è possibile risolvere questo problema all'interno del solr.Controllare la documentazione, il solr non ordina campi multivalosi.Le versioni precedenti di solr ti consentono di provare, ma i risultati erano indefiniti e imprevedibili.
Cambia il tuo schema e inserisci i dati di ordinamento nei campi indicizzati Valore singolo o è necessario effettuare diverse query, prima per gli aeroporti, poi i distretti della città, quindi le stazioni ferroviarie.
Per ordinare gli elementi all'interno del campo stesso è necessario indicilizzarlo in ordine desiderato o fare la post-elaborazione.Il tipo di solr ordinerà solo i documenti!