我有Django + Haystack + Elasticsearch的设置。我正在搜索q =“Çakıcı'nınİlkKurşunu”。并没有出现任何结果。当我在Elasticsearch索引中查看此对象的文本字段时,我看到文本存储为“Çakıcı'nınİlkKurşunu”。单引号转换为html安全表示法。
所以我假设当我创建索引时,我的数据库对象由Elasticsearch转换。
为了克服这种情况,我通过覆盖Form类的clean_q方法来改变q字段。我使用django.utils.html.escape方法将单引号转义为存储在索引中的elasticsearch。
这是我的表单代码。
class BstBookSearchForm(SearchForm):
def no_query_found(self):
return self.searchqueryset.all()
def search(self):
#print self.cleaned_data.get('q')
# First, store the SearchQuerySet received from other processing. (the main work is run internally by Haystack here).
sqs = super(BstBookSearchForm, self).search()
# if something goes wrong
if not self.is_valid():
return self.no_query_found()
# you can then adjust the search results and ask for instance to order the results by title
#sqs = sqs.order_by(book_name)
return sqs
def clean_q(self):
return escape(self.cleaned_data['q'])
Django,Haystack还是Elasticsearch都有内置的方式进行转换。
你认为我的解决方案是一种不好的做法吗?