Domanda

Sono con alcuni problemi in Django Haystack 1.2.5. Devo aumentare un campo ma abilmente non funziona. Sto usando Solr 1.4.1.

Il mio indice:

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

Ho in job_title "boost = 1.50" ma a quanto pare non funziona, questo è ciò che viene generato da 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 domanda che sto facendo è questa:

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

Qualcuno può darmi un indizio su ciò di cui ho bisogno per far funzionare Haystack Boost?

Distinti saluti,


Aggiornamento 1: devo dare maggiore importanza al campo "Job_title". Se ad esempio sto cercando la parola "programmatore" devo mostrare in primo luogo i risultati che hanno "programmatore" nel campo "job_title" ordinato per data e quindi i risultati che hanno la parola "programmatore" nel campo "job_description". Il boost di Haystack è lo strumento giusto per raggiungere questo obiettivo?

È stato utile?

Soluzione

Specifica boost=1.5 Nella definizione del tuo campo è il modo in cui dici a Haystack di utilizzare "Boost Field" su quel campo specifico. Dalla documentazione di Haystack:

Esistono tre tipi di spinta:

  • Termine Boost

  • Boost del documento

  • Boost sul campo

La spinta del termine avviene al tempo di query (quando viene eseguita la query di ricerca) e si basa sull'aumentare del punteggio è una determinata parola/frase.

D'altra parte, i potenziamenti di documenti e campo si svolgono al momento dell'indicizzazione(Quando il documento viene aggiunto all'indice). Il potenziamento del documento provoca la rilevanza dell'intero risultato, dove il campo Aumenta fa sì che le ricerche solo all'interno di quel campo facciano meglio.

Hai specificato il campo del campo nel tuo codice, che aumenterà il campo quando il modello è indicizzato, non quando fai la tua query. La buona notizia è che la spinta specificata verrà ancora utilizzata quando viene effettuata una ricerca su quel campo, ma verrà applicata implicitamente, piuttosto che essere specificata esplicitamente nella query a Solr.

Non credo che la query che hai specificato avrà applicato la boost, anche se non hai cercato su nessun campo.

Altri suggerimenti

Ho avuto lo stesso problema: "Schema.xml" non è cambiato dopo aver avuto il parametro "Boost" nel modello. Come soluzione ho iniziato a utilizzare la modalità di query di Dismax. Qualcosa di simile a questo funziona per me:

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

Spero che questo aiuti qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top