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

Вернуться на верх