Django Haystack выбор полей для поиска
Предположим, у меня есть модель Person, выглядящая следующим образом:
class Person(models.Model):
title = models.CharField(max_length=300, blank=True, null=True)
first_name = models.CharField(max_length=300, blank=True, null=True)
last_name = models.CharField(max_length=300, blank=False, null=False)
Поисковый индекс Haystack выглядит следующим образом:
class NoteIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
first_name = indexes.CharField(model_attr='first_name')
last_name = indexes.CharField(model_attr='last_name')
Допустим, шаблон включает все три поля (имя, фамилия и должность). Если пользователи должны иметь возможность выбирать, по каким полям искать, нужно ли мне создавать отдельные индексы для всех возможных перестановок? Или я могу сузить поиск до одного или двух из трех полей?
Если да, то как?
Я знаю, что могу фильтровать наборы SearchQuerySets с помощью .filter().
SearchQuerySet().filter(first_name='foo')
Но это фильтрует набор для точных значений. Даже __icontains
ограничен фильтрацией по одному полю.
Вы можете использовать AutoQuery
вместо стандартного filter
:
from haystack.inputs import AutoQuery
SearchQuerySet().filter(first_name=AutoQuery('foo'))
https://django-haystack.readthedocs.io/en/v2.4.1/inputtypes.html#autoquery