Pregunta

Estoy con algunos problemas en Django Haystack 1.2.5. Necesito impulsar un campo, pero aparentemente no funciona. Estoy usando Solr 1.4.1.

Mi índice:

class JobsTextIndex(indexes.SearchIndex):
    text            = indexes.CharField(document=True, use_template=True)
    job_title       = indexes.CharField(model_attr='job_title', boost=1.50)
    job_description = indexes.CharField(model_attr='job_description')
    country_ad      = indexes.CharField(model_attr='country_ad')
    zone_ad         = indexes.CharField(model_attr='zone_ad', faceted=True)
    location_ad     = indexes.CharField(model_attr='location_ad', faceted=True)
    date_inserted   = indexes.DateTimeField(model_attr='date_inserted')

    def index_queryset(self):
    """Used when the entire index for model is updated."""
    return JobsadsText.objects.filter(date_inserted__lte=datetime.datetime.now())

Tengo en el trabajo_title "boost = 1.50", pero esto aparentemente no funciona, esto es lo que se genera por Solr:

INFO: [core0] webapp=/solr path=/select/ params={facet=on&sort=date_inserted+desc&fl=*+score&start=0&q=arquiteto&facet.field=location_ad_exact&facet.field=zone_ad_exact&wt=json&fq=django_ct:(myapp.jobstext)&rows=20} hits=65 status=0 QTime=5 

La consulta que estoy haciendo es esta:

sqs = SearchQuerySet().facet('zone_ad').facet('location_ad').order_by('-date_inserted')

¿Alguien puede darme una pista sobre lo que necesito para que el impulso de Haystack funcione?

Saludos,


Actualización 1: Necesito dar más importancia al campo "Job_title". Si, por ejemplo, estoy buscando la palabra "programador", necesito mostrar en primer lugar los resultados que tienen "programador" en el campo "Job_title" ordenado por fecha y luego los resultados que tienen la palabra "programador" en el campo "Job_description". ¿El impulso de Haystack es la herramienta adecuada para lograr esto?

¿Fue útil?

Solución

Especificación boost=1.5 En su definición de campo es cómo le dice a Haystack que use 'Field Boost' en ese campo específico. De la documentación de Haystack:

Hay tres tipos de impulso:

  • Impulso de término

  • Impulso de documentos

  • Impulso de campo

Term Boost ocurre en el momento de la consulta (cuando se ejecuta la consulta de búsqueda) y se basa en el aumento del puntaje es una determinada palabra/frase.

Por otro lado, los aumentos de documentos y de campo tienen lugar en el momento de la indexación(Cuando el documento se agrega al índice). El impulso del documento hace que la relevancia de todo el resultado aumente, donde el refuerzo de campo solo hace que las búsquedas dentro de ese campo funcionen mejor.

Ha especificado el aumento de campo en su código, que aumentará el campo cuando el modelo esté indexado, no cuando realiza su consulta. La buena noticia es que el impulso que especificó aún se utilizará cuando se realice una búsqueda en ese campo, pero se aplicará implícitamente, en lugar de especificarse explícitamente en la consulta a Solr.

Sin embargo, no creo que la consulta que haya especificado se aplique el impulso, ya que no ha buscado en ningún campo.

Otros consejos

Tuve el mismo problema: "Schema.xml" no ha cambiado después de haber tenido el parámetro "Boost" en el modelo. Como solución, comencé a usar el modo de consulta Dismax. Algo como esto me está funcionando:

SearchQuerySet().filter(text=Raw("{!dismax qf='field1^3 field2^2 text'}" + query))

Espero que esto ayude a alguien.

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