部分匹配搜索Wagtail与Postgres

fin*_*ina 6 django wagtail

我有一个由Postgres驱动的wagtail网站,并希望对所有文档实施模糊搜索.但是,根据wagtail docs, "SearchField(partial_match = True)未被处理".有谁知道我可以实现自己的部分匹配搜索的方式?

我故意开放这个问题是因为我对任何能够运行良好且可扩展的解决方案持开放态度.

Ber*_*age 4

我们\xe2\x80\x99 目前正在重建 Wagtail 搜索 API,以使自动完成功能在后端之间的使用方式大致相同。

\n\n

目前,您可以直接使用IndexEntry存储搜索数据的模型。不幸的是,django.contrib.postgres.search不包含执行自动完成查询的方法,因此我们现在必须自己完成。以下是如何做到这一点:

\n\n
from django.contrib.postgres.search import SearchQuery\nfrom wagtail.contrib.postgres_search.models import IndexEntry\n\nclass SearchAutocomplete(SearchQuery):\n    def as_sql(self, compiler, connection):\n        return "to_tsquery(\'\'%s\':*\')", [self.value]\n\nquery = SearchAutocomplete(\'postg\')\nprint(IndexEntry.objects.filter(body_search=query).rank(query))\n# All results containing words starting with \xe2\x80\x9cpostg\xe2\x80\x9d\n# should be displayed, sorted by relevance.\n
Run Code Online (Sandbox Code Playgroud)\n

  • 是的,在 Wagtail 的最新版本中,Karl Hobley 和我在所有搜索后端创建了一个“自动完成”方法,如 Mark Chackerian 的回答所示。 (2认同)