2011-12-03 10 views
6

Estoy con algunos problemas en Django Haystack 1.2.5. Necesito impulsar un campo pero aparentemente no está funcionando. Estoy usando Solr 1.4.1.Django Haystack - ¿Cómo mejorar un campo?

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()) 

que tengo en el job_title "impulso = 1.50", pero esto al parecer no está funcionando, 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 que estoy haciendo es éste:

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

Puede alguien dar una pista de lo que necesito para obtener Haystack Boost de trabajo?

Best Regards,


Actualizar 1: Tengo que 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 "nombre_tipo" ordenado por fecha y luego los resultados que tienen la palabra "programador" en el campo "job_description". El impulso Haystack es la herramienta adecuada para lograr esto?

+0

Estoy teniendo exactamente el mismo problema: quiero aumentar un campo, pero el parámetro boost no está haciendo nada. Llamar al método .boost() en el conjunto de consulta solo proporciona resultados muy impredecibles. ¿Has encontrado una solución? –

+0

@mixedCase, todavía no tengo el impulso funcionando. En mi caso, la única opción que tengo es hacer una consulta en bruto utilizando las capacidades de Solr "dismax", pero he estado fuera de tiempo para leer más sobre Solr ... –

Respuesta

6

La especificación de boost=1.5 en su definición de campo es la forma en que le dice a Haystack que use 'Incremento de campo' en ese campo específico. De la documentación Haystack:

Hay tres tipos de impulso:

  • Boost Plazo

  • Boost Documento

  • Boost campo impulso

Plazo happ En el momento de la consulta (cuando se ejecuta la consulta de búsqueda) y es en función del aumento del puntaje es una determinada palabra/frase se ve.

Por otro lado, el documento & aumenta de campo se llevan a cabo en el momento de la indexación (cuando se agrega el documento al índice). Aumento del documento provoca la relevancia de todo el resultado para aumentar, donde el aumento de campo provoca solo búsquedas dentro de ese campo para hacerlo mejor.

Has especificado el aumento de campo en tu código, lo que aumentará el campo cuando el modelo esté indexado, no cuando hagas tu consulta. La buena noticia es que el impulso que especificó se seguirá utilizando 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.

No creo que la consulta que ha especificado tendrá el impulso aplicado, ya que no ha buscado en ningún campo.

+1

gracias por la respuesta. He reconstruido el índice pero los resultados de búsqueda son los mismos que antes de haber agregado el parámetro "boost" en el modelo. Otra cosa que he notado es que "schema.xml" no ha cambiado después de tener el parámetro "boost" en el modelo, he ejecutado el comando "build_solr_schema" pero el "boost" en el modelo no tiene ningún efecto Alguien tiene más pistas sobre esto? Gracias. –

0

Tuve el mismo problema: "schema.xml" no ha cambiado después de tener el parámetro "boost" en el modelo. Como solución, comencé a usar el modo de consulta DisMax.Algo como esto me funciona:

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

Espero que esto ayude a alguien.

+0

¿Algún buen recurso para leer cómo lograr esto? ¿O encontraste una mejor solución? – phoenixwizard

+0

No sé a qué te refieres. He leído [haystack docs] (http://django-haystack.readthedocs.org/en/latest/inputtypes.html) y [dismax wiki] (http://wiki.apache.org/solr/DisMaxQParserPlugin). También he cambiado el código un poco a: 'SearchQuerySet(). Filter (text = AltParser ( 'dismax', q, qf = 'campo1^3 campo2^2 texto', )' – ambi

Cuestiones relacionadas