Frage

Ich habe einige Probleme in Django Haystack 1.2.5. Ich muss ein Feld steigern, aber es funktioniert natürlich nicht. Ich benutze Solr 1.4.1.

Mein Index:

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

Ich habe im Job_Title "Boost = 1,50", aber dies funktioniert anscheinend nicht, dies ist das, was von Solr erzeugt wird:

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 

Die Abfrage, die ich mache, ist diese:

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

Kann mir jemand eine Ahnung geben, was ich brauche, um den Haystack -Boost zum Laufen zu bringen?

Mit freundlichen Grüßen,


Update 1: Ich muss dem Feld "Job_title" mehr Bedeutung geben. Wenn ich zum Beispiel nach dem Wort "Programmierer" suche, muss ich in erster Linie die Ergebnisse zeigen, die im Feld "Job_title", das nach Datum bestellt wurde, und dann die Ergebnisse, die das Wort "Programmierer" in der "Job_Description" Feld. Der Heustack -Schub ist das richtige Werkzeug, um dies zu erreichen?

War es hilfreich?

Lösung

Angeben boost=1.5 In Ihrer Felddefinition sagen Sie, dass Sie Haystack in diesem speziellen Feld "Field Boost" verwenden sollen. Aus der Heuhaufendokumentation:

Es gibt drei Arten von Boost:

  • Begriff Boost

  • Dokumentschub

  • Feldschub

Der Begriff Boost erfolgt zur Abfragezeit (wenn die Suchabfrage ausgeführt wird) und basiert auf der Erhöhung der Punktzahl. Es ist ein bestimmtes Wort/eine bestimmte Phrase.

Andererseits finden Dokument- und Feldschubs zum Indexierungszeit statt(Wenn das Dokument zum Index hinzugefügt wird). Der Dokumentschub führt zu einer Relevanz des gesamten Ergebniss, bei dem das Feld Boost nur in diesem Feld besser abschneidet.

Sie haben den Feldschub in Ihrem Code angegeben, wodurch das Feld gestärkt wird, wenn das Modell indiziert ist, nicht, wenn Sie Ihre Abfrage vornehmen. Die gute Nachricht ist, dass der von Ihnen angegebene Boost weiterhin verwendet wird, wenn eine Suche in diesem Bereich durchgeführt wird, aber implizit angewendet wird, anstatt explizit in der Abfrage zu Solr angegeben zu werden.

Ich glaube nicht, dass die von Ihnen angegebene Abfrage jedoch den Boost darauf angewendet hat, da Sie nicht auf Feldern gesucht haben.

Andere Tipps

Ich hatte das gleiche Problem - "Schema.xml" habe sich nicht geändert, nachdem ich den Parameter "Boost" im Modell hatte. Als Lösung habe ich begonnen, den Dismax -Abfragemodus zu verwenden. So etwas funktioniert für mich:

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

Ich hoffe, das wird jemandem helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top