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?

È stato utile?

Soluzione

stai ricevendo train_stations 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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top