Как сделать поиск по комбинациям полей доступным в 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, но я полагаю, что это не зависит от него.

Вот различные решения, которые я пробовал.

  1. Splitting up search terms.

Разделение терминов и поиск каждого по отдельности дает слишком щедрое поведение поиска. Например, поиск по "foo" дает 10 результатов. Слишком щедро, укажите больше и введите "foo bar". Поиск по-прежнему дает 10 результатов, так как слово "foo" теперь проверяется отдельно.

  1. Making different search_fields within the index for every combination of underlying model fields I would like to search

Увеличивается на N для каждого поля, которое я делаю отдельно доступным для поиска. Большое ноно на мой вкус.

  1. Making searches in fields mutually exclusive

Глубоко неудовлетворительно для меня и моего клиента.

Есть ли что-то, что я упускаю?

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