Одновременный поиск страниц и пользовательских моделей в Wagtail

Я сделал грубую ошибку - реализовал некоторые модели в нашем приложении как простые модели Django (но индексируемые) вместо моделей страниц.

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

Мы используем серверную часть PostgreSQL. Для функции s.search() требуется модель или набор запросов; и вы не можете комбинировать наборы запросов PostgresSearchResults. Если я конвертирую 2 набора результатов в список и объединяю их, я теряю актуальность результатов.

Есть идеи?

1 ответ

Решение

Для отображения неоднородных результатов поиска вы можете использовать:

from itertools import chain

Допустим, вы выполнили поиск по страницам, документам, изображениям, а также получили некоторые другие результаты - вы можете сделать это (включая разбиение на страницы, поскольку это вам тоже понадобится):

page_results = SOME PAGE RESULTS
doc_results = docs_to_search.search(search_query, order_by_relevance=False)
img_results = images_to_search.search(search_query, order_by_relevance=False)
other_search_results = SOME RESULTS FROM SEARCHING MODELS

all_results = list(chain(other_search_results, page_results, img_results, doc_results))

# Pagination
paginator = Paginator(all_results, items_per_page, orphans=num_orphans)
try:
    results = paginator.page(page)
except PageNotAnInteger:
    results = paginator.page(1)
except EmptyPage:
    results = paginator.page(paginator.num_pages)

а затем верните свой results из вашего представления и визуализируйте в шаблоне с {% for result in results %}

Другие вопросы по тегам