Nano Hash - криптовалюты, майнинг, программирование

Django Haystack - Как увеличить поле?

У меня проблемы с Django Haystack 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». Если, например, я ищу слово «программист», мне нужно показать в первую очередь результаты со словом «программист» в поле «должность», упорядоченные по дате, а затем результаты со словом «программист» в поле Поле «описание_работы». Повышение стога сена является правильным инструментом для достижения этой цели?


  • У меня точно такая же проблема: я хочу увеличить одно поле, но параметр повышения ничего не делает. Вызов метода .boost() для набора запросов дает очень непредсказуемые результаты. Вы придумали решение? 16.12.2011
  • @mixedCase, у меня пока не работает ускорение. В моем случае единственный вариант, который у меня есть, - это выполнить необработанный запрос, используя возможности dismax Solr, но у меня не было времени, чтобы узнать больше о Solr... 17.12.2011

Ответы:


1

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

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

  • Повышение срока

  • Повышение уровня документов

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

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

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

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

Я не думаю, что к указанному вами запросу будет применено ускорение, поскольку вы не выполняли поиск ни по каким полям.

04.12.2011
  • Спасибо за ответ. Я перестроил индекс, но результаты поиска такие же, как и до того, как я добавил в модель параметр повышения. Еще одна вещь, которую я заметил, заключается в том, что schema.xml не изменился после того, как у меня был параметр boost в модели, я запустил команду build_solr_schema, но повышение модели не имеет никакого эффекта. У кого-то есть больше подсказок по этому поводу? Спасибо. 04.12.2011

  • 2

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

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

    Я надеюсь, что это поможет кому-то.

    27.08.2013
  • Любой хороший ресурс, чтобы прочитать, как этого добиться? Или вы нашли лучшее решение? 12.10.2013
  • Я не уверен, что вы имеете в виду. Я прочитал документы по стогу сена и dismax wiki. Я также немного изменил код: SearchQuerySet().filter(text=AltParser( 'dismax', q, qf='field1^3 field2^2 text', )) 15.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..