¿Es posible tener SOLR MoreLikeThis utilizar diferentes campos de modelo y partidos?

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

  •  10-10-2019
  •  | 
  •  

Pregunta

Digamos que tengo documentos con dos campos, A y B.

Me gustaría usar MoreLikeThis de SOLR, pero con un giro: Estoy muy interesado en el impulso de los documentos cuyo campo es como un campo B de mi documento de modelo. (Es decir, el extracto de las condiciones interesantes 'de MLT desde el campo el modelo B, pero los resultados MLT solo se obtienen según el campo A).

No veo una manera de utilizar los campos mlt.fl o mlt.qf aumenta para conseguir este efecto en una sola consulta. (Parece campos Especifica mlt.fl utilizados tanto para el descubrimiento de las condiciones interesantes 'y la coincidencia de esos términos.) Me estoy perdiendo alguna opción?

O voy a tener que extraer los términos 'interesantes' a mí mismo y cambiar el 'campo: término'? Detalles

(Otras ideas en este mismo sentido apreciado también.)

¿Fue útil?

Solución 2

Ahora que hay dos maneras de lograr el efecto deseado (sin personalizar el código fuente MLT).

Primera opción: Hacer una consulta inicial con el MLT MLT manejador , añadiendo el parámetro &mlt.interestingTerms=details. Esto incluye la lista de términos que se consideraron interesante, clasificados con sus aumentos relativos. Los usos habituales de comportamiento esos términos descubiertos contra los mismos campos mlt.fl para encontrar documentos similares. Por ejemplo, la respuesta incluirá algo como:

"interestingTerms": 
    ["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]

(Dado que la única cosa sobre esta consulta inicial que es interesante es la interestingTerms, lanzando en un fq que descarta todos los documentos podrían ayudar a que el trabajo del salto de puntuación innecesaria.)

explícitamente re-componer esa información interestingTerms en una nueva o una consulta cantidades field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794 a utilizar el texto de ejemplo de campos B para encontrar documentos que son similares en el campo A, y se puede imitar exactamente el tipo de consulta predeterminada MLT hace en su modelo habitual ámbito.

Segunda opción: Grab actual texto del campo B del modelo de documento, y se alimentan directamente como un cuerpo ContentStream , para ser utilizado en lugar de una consulta, para especificar el documento modelo. Entonces objetivo mlt.fl en el campo A para el bien de la recogida de resultados similares. Por ejemplo, un fragmento de los parámetros puede ser …&stream.body=foo bar baz&mlt.fl=field_a&…. Una vez más, el efecto neto es que el texto modelo originaria de field_b es encontrar documentos similares sólo en field_a.

Otros consejos

Dos opciones que veo son:

  1. Utilice un copyField -. El índice de su documento original con una copia de campo Un llamado B, y luego consulta utilizando B
  2. Extender MoreLikeThisHandler y cambiar los campos que consulta.

La primera opción cuesta un poco de programación (en su mayoría los cambios de configuración) y parte del consumo de memoria. El segundo se refiere a la programación más pero no un incremento huella de memoria. una esperanza de ellos se adapte a sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top