[英]Django Haystack-Xapian search fails with special characters and spaces
我正在開發一個現有的Django項目,它使用帶有xapian后端的haystack來實現全局搜索功能。 然而,當我搜索一些特殊字符,如&和空格等時,搜索似乎失敗了。我試過但是找不到解決方法。
有沒有辦法可以逃脫這些角色並使搜索工作? 我在后端使用PostgreSQL。 任何指針都會非常有用。
更新:搜索功能使用SearchForm,查詢字符串位於from的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']))
沒有運氣。 我仍然無法搜索空格和像&這樣的特殊字符。
轉義取決於你如何使用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
免責聲明:我是Xapian-Haystack的(新)維護者。
我相信你所報告的內容與Xapian-Haystack如何將字符串解析為可索引的搜索術語有關:因為它使用了Xapian默認生成器,它忽略了特殊字符,你無法搜索特殊字符,因為它們甚至沒有被索引。
例如,字符串"^ best-seller"
被索引為: "best"
和"seller"
:對"^"
的搜索或"^ best-seller"
上的精確搜索將失敗。
這已經解決了 :現在應該支持所有特殊字符。
空間永遠不會被索引,因為在Xapian-Haystack(或Haystack)中,因為它是單詞分隔符。
雖然我暫時不建議在制作中使用制作大師,但也許這可以回答你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.