2012-12-17 10 views
11

Dire che ho queste dichiarazioni di campo:Quando si esegue un campo di copia in Solr, il boost di campo va con esso?

<field name="Title" type="text_general" stored="true" multiValued="false" /> 
<field name="Body" type="text_general" stored="true" multiValued="false" /> 

Quando ho indice "titolo", ho impostato la spinta a 5, che significa parole del campo "Title" dovrebbe contare per la 5x normale.

Poi faccio questo:

<copyField source="Title" dest="SearchText"/> 
<copyField source="Body" dest="SearchText"/> 

Così, ho copiato entrambi i campi in un altro campo chiamato "Testo di ricerca."

Quando eseguo la ricerca in "SearchText", i termini del campo "Titolo" contengono ancora il loro incremento 5x? O lo perdono nella copia? Quando fai un campo di copia, la spinta di tutti i campi viene "livellata"?

risposta

0

Per quanto ne so, la spinta è su un campo per base. Quindi, se hai applicato una spinta al campo "Titolo", il campo "SearchText" non ha la stessa spinta. Dovrai dare una spinta separata al campo "SearchText" per aumentare le partite.

+0

Esistono entrambi gli amplificatori di documenti e campi. Quindi non ne sono troppo sicuro. –

9

Dopo aver fatto qualche lettura, penso che la spinta venga spogliata. La nostra soluzione era fare questo:

Abbiamo creato quattro campi: SearchText, SearchText2, SearchText3 e SearchText4. Copiamo in tutto il in SearchText, alcune cose in SearchText2, meno materiale in SearchText3 e solo le cose super-critiche in SearchText4.

Poi, il nostro param "qf" assomiglia a questo:

SearchText, SearchText2^3, SearchText3^10, SearchText4^100 

Quindi, stiamo aumentando i campi da nessuno, 3, 10, e 100 in fase di query.

Non sembra aggraziato, ma funziona bene e ci consente di regolare la spinta senza reindirizzare.

Inoltre, c'è un livello di astrazione qui: mettendo qualcosa in SearchText2, per esempio, stiamo dicendo "Questo è importante", tuttavia, non stiamo definendo quanto importante (in termini di incremento numerico) fino tempo di interrogazione. Quindi, copyField è l'astrazione e il parametro "qf" nell'implementazione.

0

Quando si esegue il copyfield, l'incremento del campo non viene copiato con esso. Tuttavia, esiste una soluzione semplice che non richiede la modifica delle query.

Se si eseguono più copyfield per lo stesso campo, questo verrà copiato più volte nel risultato, aumentando così il suo peso.

Quindi, per ottenere 5 volte il peso sul titolo, è sufficiente eseguire lo copyfield cinque volte.

<copyField source="Title" dest="SearchText"/> 
<copyField source="Title" dest="SearchText"/> 
<copyField source="Title" dest="SearchText"/> 
<copyField source="Title" dest="SearchText"/> 
<copyField source="Title" dest="SearchText"/> 
<copyField source="Body" dest="SearchText"/> 
Problemi correlati