Как сделать поиск по комбинациям полей доступным в Django Haystack
Предположим, у меня есть индекс поиска, подобный этому, для модели главы в книге.
class ChapterIndex(indexes.ModelSearchIndex, indexes.Indexable):
# Normal document field - most often searched
text = indexes.EdgeNgramField(document=True, use_template=True)
# Other fields Id like to be searchable
title = indexes.EdgeNgramField()
author = indexes.EdgeNgramField()
Теперь предположим, что пользователь выбирает поиск по полям названия и автора и вводит следующий текст: "titlepart author_lastname", что не является маловероятным поиском.
Я строю свои поисковые запросы следующим образом:
SQ(title=AutoQuery(query)) | SQ(author=AutoQuery(query))
Проблема в том, что полный текст теперь не находится ни в одном из полей author (не хватает части title) и title (не хватает фамилии автора). Поэтому правильная глава (где поле author содержит фамилию, а title - часть заголовка) не выбирается django-haystack. Я использую для этого бэкенд whoosh, но я полагаю, что это не зависит от него.
Вот различные решения, которые я пробовал.
- Splitting up search terms.
Разделение терминов и поиск каждого по отдельности дает слишком щедрое поведение поиска. Например, поиск по "foo" дает 10 результатов. Слишком щедро, укажите больше и введите "foo bar". Поиск по-прежнему дает 10 результатов, так как слово "foo" теперь проверяется отдельно.
- Making different search_fields within the index for every combination of underlying model fields I would like to search
Увеличивается на N для каждого поля, которое я делаю отдельно доступным для поиска. Большое ноно на мой вкус.
- Making searches in fields mutually exclusive
Глубоко неудовлетворительно для меня и моего клиента.
Есть ли что-то, что я упускаю?