4

我正在开发一个现有的 Django 项目,该项目使用带有 xapian 后端的 haystack 来实现全局搜索功能。但是,当我使用一些特殊字符(如 & 和空格等)进行搜索时,搜索似乎失败了。我尝试过但找不到修复它的方法。

有没有办法可以逃避这些字符并使搜索工作?我在后端使用 PostgreSQL。任何指针都会非常有帮助。

更新:搜索功能使用 SearchForm,查询字符串来自 q 字段。这在代码中如下所示。

sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])

我试过使用:

sqs = self.searchqueryset.filter(self.cleaned_data['q'])

sqs = self.searchqueryset.filter(content=Clean(self.cleaned_data['q']))

没有运气。我仍然无法使用空格和特殊字符(如 &)进行搜索。

4

2 回答 2

1

免责声明:我是 Xapian-Haystack 的(新)维护者。

我相信您报告的内容与 Xapian-Haystack 如何将字符串解析为可索引的术语进行搜索有关:因为它使用忽略特殊字符的 Xapian 默认生成器,所以您无法搜索特殊字符,因为它们甚至没有被索引。

例如,字符串"^ best-seller"被索引为:"best""seller": 搜索"^"或精确搜索"^ best-seller"将失败。

现在已经解决了这个问题:现在应该支持所有特殊字符。

空间永远不会被索引,因为在 Xapian-Haystack(或 Haystack)中,因为它是单词分隔符。

虽然我目前不建议在生产中使用 master ,但也许这可以回答您的问题。

于 2014-05-23T09:05:04.977 回答
1

转义取决于您如何使用 Haystack,但是,haystack.inputs.Clean该类可能是您正在寻找的。只需传递您要搜索的任何内容:

q = "amp & sand"
q_clean = haystack.inputs.Clean(q)
sqs = SearchQuerySet().filter(content=q_clean)

请参阅此处的文档:http: //django-haystack.readthedocs.org/en/latest/inputtypes.html#clean

于 2014-03-15T21:25:38.430 回答