E 'possibile avere SOLR MoreLikeThis utilizzare i campi diversi per il modello e le partite?

StackOverflow https://stackoverflow.com/questions/3994423

  •  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.)

È stato utile?

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:

  1. Usa un copyField -. Indicizzare il documento originale con una copia del campo A di nome B, e quindi query utilizzando B
  2. 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.

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