在 Wagtail 中同时搜索页面和自定义模型

Searching Pages and custom models at the same time in Wagtail

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

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

我们正在使用 PostgreSQL 后端。 s.search() 函数需要模型或查询集;并且您不能组合 PostgresSearchResults 查询集。如果我将 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)

然后 return 您的 results 从您的视图中呈现并使用 {% for result in results %}

在模板中呈现