Джанго Хейстек - Как повысить поле?
-
27-10-2019 - |
Вопрос
Я с некоторыми проблемами в Джанго Хэт -Устече 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". Ускорение сена - это правильный инструмент для достижения этого?
Решение
Указание boost=1.5
В определении вашей области вы говорите, что Haystack использует «Boost» в этом конкретном поле. Из документации с сенами:
Есть три типа повышения:
Срок повышения
Документ повышение
Полевой повышение
Убийство термина происходит во время запроса (когда запускается поисковый запрос) и основан на увеличении счета, является определенным словом/фразой.
С другой стороны, повышение документов и поля происходят во время индексации(Когда документ добавляется в индекс). Boost Document приводит к повышению актуальности всего результата, когда повышение поля вызывает только поиски в этом поле, чтобы добиться большего успеха.
Вы указали повышение поля в своем коде, что увеличит поле, когда модель индексируется, а не при выдвижении вашего запроса. Хорошей новостью является то, что указанный вами повышение все еще будет использоваться при поиске в этом поле, но будет применяться неявно, а не указано явно в запросе на Solr.
Я не думаю, что указанный вами запрос будет применен к нему повышение, хотя, поскольку вы не искали ни на каких полях.
Другие советы
У меня была та же проблема - «Schema.xml» не изменилась после того, как у меня был параметр «Boost» в модели. В качестве решения я начал использовать режим запроса Dimax. Что -то подобное работает для меня:
SearchQuerySet().filter(text=Raw("{!dismax qf='field1^3 field2^2 text'}" + query))
Я надеюсь, что это кому -то поможет.