0

我犯了一个错误——在我们的应用程序中将一些模型实现为普通的 Django 模型(但可索引)而不是 Page 模型。

现在客户希望看到一个统一的搜索结果页面(所以分面搜索是不够的)......所以我完全卡住了。

我们正在使用 PostgreSQL 后端。s.search() 函数需要模型或查询集;并且您不能组合 PostgresSearchResults 查询集。如果我将 2 个结果集转换为列表并将它们组合起来,我将失去结果的相关性。

有任何想法吗?

4

1 回答 1

2

为了呈现非同质搜索结果,您可以使用:

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

于 2019-10-03T13:30:12.847 回答