Джанго Хейстек - Как повысить поле? - PullRequest
6 голосов
/ 03 декабря 2011

У меня с некоторыми проблемами в стоге сена Джанго 1.2.5.Мне нужно увеличить одно поле, но, видимо, оно не работает.Я использую Solr 1.4.1.

Мой индекс:

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

У меня в job_title "boost = 1.50", но это, видимо, не работает, это то, что генерируетсяот 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 

Я задаю следующий запрос:

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

Может кто-нибудь подсказать мне, что мне нужно, чтобы Haystack Boost работал?

С наилучшими пожеланиями,


Обновление 1: мне нужно уделить больше внимания полю "job_title".Если, например, я ищу слово «программист», мне нужно в первую очередь показать результаты, в которых «программист» в поле «job_title» упорядочен по дате, а затем результаты, содержащие слово «программист» вполе "job_description".Haystack boost - правильный инструмент для достижения этой цели?

Ответы [ 2 ]

6 голосов
/ 04 декабря 2011

Указание boost=1.5 в определении вашего поля - это то, как вы говорите Haystack использовать 'Field boost' в этом конкретном поле.Из документации Haystack:

Существует три типа повышения:

  • Ускорение терминов

  • Ускорение документов

  • Повышение поля

Повышение срока происходит во время запроса (когда выполняется поисковый запрос) и основано на увеличении оценки определенного слова/ фраза замечена.

С другой стороны, повышение документа и поля происходит во время индексации (когда документ добавляется в индекс).Увеличение документа приводит к повышению релевантности всего результата, в то время как повышение поля приводит к улучшению результатов поиска только в этом поле.

Вы указали повышение поля в своем коде, что приведет к увеличению полякогда модель индексируется, а не когда вы делаете запрос.Хорошая новость заключается в том, что указанное вами повышение все равно будет использоваться при поиске по этому полю, но будет применяться неявно, а не задано явно в запросе к Solr.

Не думаю, что к указанному вами запросу будет применено повышение, хотя вы не искали ни в одном из полей.

0 голосов
/ 28 августа 2013

У меня была такая же проблема - "schema.xml" не изменился после того, как в модели появился параметр "boost".В качестве решения я начал использовать режим запросов DisMax.Нечто подобное работает для меня:

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

Надеюсь, это кому-нибудь поможет.

...