2016-02-29 17 views
5

voglio risolvere un problema relativo al ordinamento a base di prodotti di una categoria:Solr sorta su una colonna dinamica

Ho 3 tabelle

prodotto

|-------id----------|-----name-------| 
|  p1   |  Prod 1 | 
|  p2   |  Prod 2 | 
|  p3   |  Prod 3 | 
|  p4   |  Prod 4 | 
|  p5   |  Prod 5 | 
|-------------------|----------------| 

Categoria

|-------id----------|-----name-------| 
|  c1   |  Cat 1  | 
|  c2   |  Cat 2  | 
|  c3   |  Cat 3  | 
|  c4   |  Cat 4  | 
|-------------------|----------------| 

Product_Category

|-----prod id-------|-----cat id-----|----score----| 
|  p1   |  c1  |  120  | 
|  p1   |  c2  |  130  | 
|  p2   |  c1  |  150  | 
|  p2   |  c3  |  120  | 
|  p2   |  c2  |  140  | 
|  p3   |  c2  |  180  | 
|  p3   |  c3  |  160  | 
|-------------------|----------------|-------------| 

Ciò significa che ho prodotti elencati in più categorie. Ho una pagina di elenco di generare dinamicamente per ogni categoria da query solr.

Attualmente la mia solr doc sembra

{ 
    product_id:p1, 
    category_id:[c1, c2] 
} 

La sfida che sto affrontando ora è che ho bisogno di supportare l'ordinamento in base a prodotti di peso categoria, ovvero pagina di elenco di C1 avrà prodotti p2, p1 in ordine e quotazione C3 sarà p3, P2, P1

(ordine del punteggio discendente) Se cambio lo schema piace guardare doc come

{ 
    product_id:p1, 
    category_id:[c1, c2], 
    c1_weight: 120, 
    c2_weight: 130 
} 

in questo modo ho bisogno di aggiungere un campo cx_weight allo schema ogni volta che aggiungiamo una nuova categoria in modo che possa ordinare per campo cx_weight.

Fammi sapere una soluzione in cui è possibile utilizzare il meccanismo di ordinamento solr per ordinare per peso di categoria e non è necessario modificare lo schema ogni volta che aggiungo una categoria.

Grazie Dheerendra

risposta

2

Perché non provare a modellare il tuo documento solr come una riga PRODUCT_CATEGORY?

{ 
    product_id:p1, 
    category_id:c1, 
    weight:120 
}, 
{ 
    product_id:p1, 
    category_id:c2, 
    weight:130 
} 

Questo supporterà i requisiti della pagina di categoria.

L'unica complicazione fattori sembrano se si cerca qualche attributo del prodotto e la necessità di de-duplicazione tra le categorie (vedi field-collapsing doc per questo)

+0

La ragione è prodotto ha molti altri campi ho bisogno di interrogare su come il prezzo, peso, spedizione gratuita ecc. allora questi campi si ripeteranno anche in ogni documento. In generale, la tecnica di cui sopra rende pesante il sistema, se avessi prodotti 1M nel mio sistema e in media se un prodotto può essere associato a 5 categorie, allora avrò 5M di documenti solo per il gusto di 2 campi che cambiano, vale a dire category_id e peso. –

+0

Lucene codifica i valori dei campi con una tabella dei simboli come un archivio colonne. In generale, la duplicazione dei dati non è problematica come con un DB relazionale. –

+0

È anche possibile esaminare le funzionalità di join di Solr per vedere se è possibile eseguire un semplice prodotto unito a prodotto/categoria, ma richiederà un po 'più di lavoro. –

Problemi correlati