Django + Haystack + Elasticsearch使用单引号搜索单词

时间:2015-03-22 14:51:09

标签: django elasticsearch django-haystack

我有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都有内置的方式进行转换。

你认为我的解决方案是一种不好的做法吗?

0 个答案:

没有答案