ExtendedDismax de Solr, qué significan los parámetros qf, qs, pf, ps, pf2, ps2, pf3, ps3

El ExtendedDismax de Solr, es decir el que utiliza Solr cuando hacemos una búsqueda con defType=edismax tiene unos parámetros realmente interesantes que afectan al cálculo del score, aunque sinceramente, cuesta un poco comprender exactamente en qué consiste y qué aporta cada uno de ellos.

qf (Query Fields)

Son los campos indexados contra los que va a buscar la expresión que llega en la query (parámetro q), por lo que afecta directamente al matching de los resultados, pero además ya permite hacer boosting para cada uno de los campos que se especifiquen. Supongamos que tenemos dos campos en nuestro schema, que son titulo y descripcion, y buscamos algo asi:

        q=+patata +caliente&qf=titulo^10 descripcion

Solr buscará los términos “patata” y “caliente” en los campos titulo y descripcion, pero si lo encuentra en titulo le otorgará un boosting de 10, mientras que si lo encuentra en descripcion, lo hará con el boosting por defecto de 1.

qs (Query phrase Slop)

Viene a indicar la proximidad que exigirá Solr cuando nos llegue un término compuesto entrecomillado. Afecta al matching. Si por ejemplo buscamos:

q=”patata caliente”&qs=2

Solr buscará los términos “patata” y “caliente” con una proximidad de 2 (valor de qs). Es decir, lo que sería una búsqueda por proximidad: q=”patata caliente”~2. Pero la gracia de qs es que lo hace de forma automática con todo aquello que se pida entre comillas. Otro ejemplo.

        q=+pollo +”patata caliente” +comida +”plato menu dia”&qs=3

Acabaría buscando q=+pollo +”patata caliente”~3 +comida +”plato menu dia”~3 . Recuerda que qs afecta al matching.

pf (Phrase Fields) y ps (Phrase Slop)

Estos dos parámetros en conjunto definen el boosting a aplicar cuando se encuentren todos los términos de búsqueda con una proximidad determinada. Importante, no afecta al matching, solo afecta al cálculo del score. De este modo, si por ejemplo buscamos:

q=+pollo +patata +caliente +comida +menu&pf=titulo^20 descripcion^5&ps=7

Solr incrementará:

  • con un boosting de 20 si encuentra en el campo titulo todos los términos con una proximidad de 7 ( titulo:(“pollo patata caliente comida menu”~7)^20 )
  • con un boosting de 5 si encuentra en el campo descripcion todos los términos con una proximidad de 7 ( descripcion:(“pollo patata caliente comida menu”~7)^5 )

pf2 (Phrase bigrams Fields) y ps2 (Phrase bigram slop)

Estos dos parámetros en conjunto definen el boosting a apicar cuando se encuentre cada uno de los bigramas de los términos de búsqueda con una proximidad determinada. Estos parámetros tampoco afectan al matching, solo al score. Así si buscamos:

q=+pollo +patata +caliente +comida +menu&pf2=titulo^40 descripcion^15&ps2=3

Solr incrementará:

  • titulo:(“patata caliente”~3)^40 , es decir, con un boosting de 40 (pf2=titulo^40) si encuentra en el campo titulo el bigrama “patata caliente” con una proximidad de 3 (ps2=3).
  • titulo:(“caliente comida”~3)^40, idem.
  • titulo:(“comida menu”~3)^40, idem.
  • descripcion:(“patata caliente”~3)^15, es decir, con un boostingde 15 (pf2=descripcion^15) si encuentra en el campo descripcion el bigrama “patata caliente” con una proximidad de 3 (ps2=3)
  • descripcion:(“caliente comida”~3)^15, idem.
  • descripcion:(“comida menu”~3)^15, idem.

pf3 (Phrase trigram Fields) y ps3 (Phrase trigram slop)

Estos dos parámetros en conjunto definen el boosting a aplicar cuando se encuentre cada uno de los trigramas de los términos de búsqueda con una proximidad determinada. Estos parámetros tampoco afectan al matching, solo al score. Así si buscamos:

q=+pollo +patata +caliente +comida +menu&pf3=titulo^60 descripcion^25&ps3=5

Solr incrementará:

    • titulo:(“patata caliente comida”~5)^60 , es decir, con un boosting de 40 (pf3=titulo^60) si encuentra en el campo titulo el trigrama “patata caliente comida” con una proximidad de 5 (ps3=5).
    • titulo:(“caliente comida menu”~5)^60, idem.
    • descripcion:(“patata caliente comida”~5)^25, es decir, con un boostingde 25 (pf3=descripcion^25) si encuentra en el campo descripcion el trigrama “patata caliente comida” con una proximidad de 5 (ps3=5)
    • descripcion:(“caliente comida menu”~5)^25, idem.

Y hasta aquí el intento de explicación, buena suerte con el ajuste del scoring.

Leave a comment