Поиск страниц и пользовательских моделей одновременно в трясогузке - PullRequest
0 голосов
/ 03 октября 2019

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

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

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

Есть идеи?

1 Ответ

0 голосов
/ 03 октября 2019

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

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 %}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...