2012-10-18 4 views
8

Ho passato ore a cercare soluzioni ai miei problemi. Ho visto persone fare domande vicine a quello che sto cercando di realizzare, ma finora nessuno sembra porre la stessa domanda. Fammi vedere se riesco a spiegarlo adeguatamente:Filtro sfaccettatura irrilevante dai risultati Solr

Dire che sono un negozio di scarpe. Sul mio sito ho tre pagine: una per le scarpe da uomo, una per le scarpe da donna e una per le scarpe per bambini. Diciamo che la mia tabella di scarpe ha il campo prod_group. Quindi per la pagina degli uomini la query sarebbe q = prod_group: men. Ora diciamo che una delle sfaccettature che voglio fornire è la marca. q = prod_group: men & filter.field = marca

Il problema che sto avendo è che i risultati della faccetta mostrano tutti i marchi nel mio database, non solo i marchi rilevanti per le scarpe da uomo. In altre parole, so già che ci sono zero scarpe da uomo nella linea "My Little Pony". Non voglio mostrare My Little Pony nella sfaccettatura del marchio. Impostare facet.mincount non è quello che mi serve. Se eseguo una query q = prod_group: men & fq = colore: rosso & filter.field = brand, il cliente desidera mostrare al consumatore che il marchio "Mighty Joe" non ha scarpe rosse quindi ho ancora bisogno di sfaccettature con un numero di faccette pari a 0.

Fondamentalmente quello che spero sono i risultati di sfaccettatura in base ai risultati della query di base. Finora l'unico modo per ottenerlo è di eseguire due query: la prima con solo la query di base e l'impostazione facet.mincount = 1 per ottenere un elenco di faccette rilevanti e quindi la query effettiva con facet.mincount di nuovo su 0 così Riesco a capire quando escludere alcune opzioni che non sono più disponibili in base alle scelte di facet già fatte.

L'esecuzione di due query sembra un po 'meno elegante. facet.pivot potrebbe aiutare a lungo termine, ma stiamo ancora usando 3.x e non vedo che cambierà presto. Ho perso qualche opzione di query/schema/configurazione che farà ciò di cui ho bisogno con una query?

risposta

0

Hai esaminato l'opzione facet.query. Dalla descrizione sembra che realizzerà ciò di cui hai bisogno.

Questo parametro consente di specificare una query arbitraria nella sintassi predefinita di Lucene per generare un conteggio di faccette. Per impostazione predefinita, sfaccettatura restituisce un conteggio dei termini univoci per un "campo", mentre facet.query consente di determinare i conteggi per termini o espressioni arbitrari.

2

È possibile verificare una opzione denominata Facet Excluding Filters, che consente di restituire le sfaccettature indipendentemente dal filtro applicato.

ad es.
si filtra sugli uomini fq=prod_group:men con facet.mincount 1 che restituirà tutte le sfaccettature del marchio applicabili a questo filtro.
Quindi, quando si esegue il filtro secondario su un colore fq=color:red, è possibile ottenere due facet uno indietro con i risultati e uno senza il filtro utilizzando i filtri esclusi
ad es. fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

Questo vi darà sia le facet con e senza filtro utilizzando il quale è possibile utilizzare per eliminare le differenze sul lato client. Un po 'di sovraccarico sul lato client, ma è sufficiente eseguire una singola query.

0
fq=prod_group:men 

rende il filtraggio applicabile agli effetti collaterali troppo, che non è il caso con q parametri.