Tag Archives: Scoring

Mi opinión sobre el libro “Relevant Search”

El libro se presenta como la herramienta definitiva para atacar la relevancia de cualquier sistema de búsqueda, alejándose de los aspectos excesivamente técnicos y centrándose en como conseguir llevar los mejores usuarios a cada usuario en cada ocasión.

Empieza con algunas definiciones para ponernos en contexto y consigue enfocar las búsquedas desde un punto de vista interesante, en base a las “features” de los documentos, y las “signals” que tenemos que saber capturar y explotar de forma adecuada.

El capítulo más técnico desde mi punto de vista, es el más útil. Se centra en explicar de manera pormenorizada como Lucene calcula el score con el que se mide la relevancia. Explica muy bien prácticamente todas variables que influyen, y da la herramienta base a partir de la que ponerse a trabajar y analizar el porqué de que un resultado vaya antes que otro.

A partir de aquí, el libro empieza a perder interés, pasando por conceptos, y temas que tienes que conocer obligatoriamente, si has trabajado con Solr o Elasticsearch. Indexación, tokens, análisis, boosting, filtros, facetings … herramientas básicas que seguro habrás utilizado si has puesto en funcionamiento algún buscador. Va resolviendo problemas, pero siempre de una forma demasiado particular para el ejemplo.

Por último intenta establecer como trabajar en el desarrollo del sistema de búsqueda y propone de forma breve algunos sistemas para personalizar y enriquecer la experiencia de búsqueda.

Mi conclusión es que para aquel que haya trabajado algún tiempo con sistemas de búsqueda en el “mundo real”, es decir, poniendo en producción con usuarios reales, este libro no aporta demasiado. Pese a venderse como un libro avanzado sobre la relevancia de la búsqueda, yo lo veo más como un material para empezar en este mundo sentando unas buenas bases, que te ayudarán a ver el problema global y no centrarte demasiado en las cuestiones técnicas. De todas formas, no creo que haya sido tiempo perdido, ya que la lectura de “Relevant Search”, como la mayoría de los libros, ha conseguido que surjan cuatro o cinco ideas que creo que vale la pena probar.

Advertisements

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.