E 'possibile avere SOLR MoreLikeThis utilizzare i campi diversi per il modello e le partite?
-
10-10-2019 - |
Domanda
Diciamo che ho dei documenti con due campi, A e B.
Vorrei utilizzare MoreLikeThis di Solr, ma con un tocco: io sono più interessato a incrementare documenti il ??cui campo A è come campo B del mio documento modello. (Cioè, estratto di 'termini interessanti' di MLT dal campo Modello B, ma i risultati MLT raccoglierà sulla base del campo A).
Non vedo un modo per utilizzare i campi mlt.fl o mlt.qf spinte per ottenere questo effetto in una singola query. (Sembra Specifica campi mlt.fl utilizzati sia per la scoperta di 'condizioni interessanti' e la corrispondenza a questi termini.) Mi sto perdendo qualche opzione?
O dovrò estrarre i 'termini' interessanti me stesso e scambiare campo ': termine'? Dettagli
(Altre idee all'interno di questa vena apprezzato pure.)
Soluzione 2
Ora che ci sono due modi per ottenere l'effetto desiderato (senza personalizzare il codice sorgente MLT).
Prima opzione: fare una query iniziale MLT con la MLT gestore , aggiungendo il parametro &mlt.interestingTerms=details
. Ciò include l'elenco dei termini che sono stati ritenuti interessanti, ordinati con le relative spinte. I normali usi comportamentali quei termini scoperti contro gli stessi campi mlt.fl per trovare documenti simili. Ad esempio, la risposta includerà qualcosa del tipo:
"interestingTerms":
["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]
(Dal momento che l'unica cosa su questo query iniziale che è interessante è l'interestingTerms, gettando in un fq
che esclude tutti i documenti potevano farne a meno saltare il lavoro di punteggio inutili.)
In modo esplicito ri-comporre che interestingTerms informazioni in un nuovo o una query ammonta field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794
di utilizzare il testo del campo B ad esempio per trovare i documenti che sono simili nel campo A, e può essere imitando esattamente il tipo di query predefinita MLT fa sul suo solito modello campo.
Seconda opzione: Grab attuale testo del campo B del modello di documento, e alimentano direttamente come un corpo ContentStream , da utilizzare al posto di una query, per specificare il modello di documento. Poi indirizzare mlt.fl al campo A per motivi di raccogliere risultati simili. Ad esempio, un frammento dei parametri può essere …&stream.body=foo bar baz&mlt.fl=field_a&…
. Anche in questo caso, l'effetto netto è che il testo del modello originario di Campo_B è trovare documenti simili solo in Campo_A.
Altri suggerimenti
Due opzioni che vedo sono:
- Usa un copyField -. Indicizzare il documento originale con una copia del campo A di nome B, e quindi query utilizzando B
- Estendere MoreLikeThisHandler e cambiare i campi di query.
La prima opzione costa un po 'di programmazione (per lo più modifiche di configurazione) e alcuni consumo di memoria. Il secondo coinvolge più programmazione ma nessun incremento occupazione di memoria. Speranza uno di loro si adatta alle vostre esigenze.