0

我是一个做原始网站的 Django 新手。我安装了 haystack 和 Whoosh 作为它的搜索引擎,因为这是最简单的事情。它工作正常,但有一个问题,我不知道如何谷歌它。我的网站上有一些类别,我已将它们的名称编入索引以进行搜索。因此,当用户输入“计算”时,它会找到计算类别并链接到它。但有一个问题。如果用户在搜索字段中输入“Comp”,则根本找不到“Computing”。这是可以配置的东西吗?如何配置?

编辑:

我还尝试了什么?安装 haystack 2.0,按照教程,安装 solr 而不是 whoosh,尝试 Ngram 字段,重建索引 10 次,重写 search_indexes.py。一切。不工作。如果我输入 Comp,它不会找到 Computing。还有什么我可以做的吗?我注意到在上面的教程中,一切都像魅力一样立即发挥作用。

4

3 回答 3

3

当你做通常的事情时:

SearchQuerySet().filter(title='Computing')

在 Haystack 1.x 中,它过滤所有与“计算”完全匹配的内容。

您可以使用 Haystack 的Field Lookups更改该行为,例如,使用 'contains' 将过滤任何包含给定字符串(Computing、Utingcomp、Comp)的内容:

SearchQuerySet().filter(title__contains='Comp')

在 Haystack 2.x 中,默认过滤器是 'contains',所以它应该像你期望的那样“开箱即用”

于 2013-01-15T14:53:45.070 回答
2

查看有关autocomplete的文档。您需要设置索引以支持 Ngram,但这应该正是您所需要的。

from haystack.query import SearchQuerySet

SearchQuerySet().autocomplete(content_auto='old')
# Result match things like 'goldfish', 'cuckold' & 'older'.
于 2013-01-15T15:28:15.380 回答
0

所以,如果我理解的话,你正在寻找的是相当于 SQL 中的“LIKE”。问题是支持 Haystack 的搜索引擎不像 RDBMS。

此过滤器的低级实现将涉及使用通配符,但大多数 Haystack 后端不支持前导通配符,这是icontains/endswith过滤器所必需的。然而,由于大多数后端支持尾随通配符,Haystack 2.x 包含一个startswith过滤器。唯一不能处理的情况是搜索单词的结尾,这看起来是不可能的。

因此,如果您已编制索引:

"Look at our great discounts in Computer section"

然后下面的 Haystack 查询 DO 匹配:

SearchQuerySet().filter(title__startswith='comp')
# match!

startswith请注意 Django 与 Haystack过滤器之间的区别。Djangostartswith将匹配完整句子的开头(即 a ),但 Haystack 将匹配标记CharField的开头(即完整句子中的每个单词)。

希望能帮助到你!

于 2014-11-14T23:20:06.223 回答