使用 django-haystack,如何仅使用部分术语执行搜索?

发布于 2024-10-10 12:53:31 字数 485 浏览 3 评论 0原文

我有 django.contrib.auth.models.User 的 Haystack/xapian 搜索索引。该模板只是

{{object.get_full_name}}

为了让用户输入名称并能够搜索它。

我的问题是这样的:如果我搜索,比如说,Sri(我的全名),我会得到与我的名字相关的用户对象的结果。但是,如果我搜索 Sri Ragh - 即我的全名和姓氏的一部分,我不会得到任何结果。

如何设置 Haystack 以便获得部分查询的适当结果? (我本质上希望它搜索*Sri Ragh*,但我不知道通配符是否真的能做到这一点,或者如何实现它们)。

这是我的搜索查询:

results = SearchQuerySet().filter(content='Sri Ragh')

I've got a Haystack/xapian search index for django.contrib.auth.models.User. The template is simply

{{object.get_full_name}}

as I intend for a user to type in a name and be able to search for it.

My issue is this: if I search, say, Sri (my full first name) I come up with a result for the user object pertaining to my name. However, if I search Sri Ragh - that is, my full name, and part of my last name, I get no results.

How can I set Haystack up so that I can get the appropriate results for partial queries?
(I essentially want it to search *Sri Ragh*, but I don't know if wildcards would actually do the trick, or how to implement them).

This is my search query:

results = SearchQuerySet().filter(content='Sri Ragh')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

二智少女 2024-10-17 12:53:31

我曾经遇到过类似的问题,作为解决方法或者可能是修复,您可以更改查询查找

results = SearchQuerySet().filter(content__startswith='Sri Ragh')

问题是 django-haystack 没有实现搜索引擎中的所有行话。当然你可以这样做。

results = SearchQuerySet().raw_search('READ THE SEARCH ENGINE QUERY SYNTAX FOR GET WILDCARD LOOKUPS')

正如 Django-haystack 所说,这是不可移植的。

I use to have a similar problem, as workaround or maybe a Fix you can change the query lookup

results = SearchQuerySet().filter(content__startswith='Sri Ragh')

The issue is that django-haystack doesn't implement all lingos from search engines. Of course you can do this.

results = SearchQuerySet().raw_search('READ THE SEARCH ENGINE QUERY SYNTAX FOR GET WILDCARD LOOKUPS')

As Django-haystack says, this is not portable.

绮烟 2024-10-17 12:53:31

您可以使用 icontains 或startswith。

请小心这一点,例如,如果查询是“r”,这将为您带来内容中包含“r”的所有“模型”实体。

Model.objects.filter(content__icontains=query)

Model.objects.filter(content__startswith=query)

查看文档

You can use icontains or startswith.

Be careful with this one, if a query is for example 'r', this will bring you all 'Model' entities that have a 'r' in its content.

Model.objects.filter(content__icontains=query)

Model.objects.filter(content__startswith=query)

Look at the documentation

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文