无法使用Django Haystack和Elasticsearch搜索部分术语

时间:2016-02-15 17:06:39

标签: django elasticsearch django-haystack

我有一个基于

的项目
Django==1.9.2
django-haystack==2.4.1
elasticsearch==2.2.0

一个非常简单的搜索视图:

def search_view(request):
    query = request.GET.get('q', '')
    sqs = SearchQuerySet().filter(content=query)
    params = {
        'results': sqs,
        'query': query,
    }
    return render_to_response('results.html', params,
        context_instance=RequestContext(request))

我的搜索索引很简单:

class CategoryIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')

    def get_model(self):
        return Category

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(published=True)

category_text.txt文件只是:

{{ object.name }}

在我的数据库中,我有几个项目:

  • Acquario
  • 于Aceto
  • Accento

当我用我的观点搜索时,我的行为很奇怪。

  1. 使用查询“ac”搜索我没有收到任何结果!我期待着我的所有物品。我尝试使用.filter(content__contains=query)更改查询(我知道这是默认设置!)但没有任何更改。

  2. 使用查询“acqua”搜索我收到1个结果对象的结果(正确),但当我尝试打印时,result.object字段为None(其他字段包含正确的信息)。

  3. 我做错了什么? 谢谢。

    更新

    我找到了问题2的解决方案。来自PyPi的最新Haystack版本不兼容Django 1.9.x。 我刚刚将-e git+https://github.com/django-haystack/django-haystack.git#egg=django-haystack添加到我的requirements.txt文件中,问题已解决。关于GitHub的更多信息:https://github.com/django-haystack/django-haystack/issues/1291

    其他问题仍未解决,我找不到任何解决方案。

1 个答案:

答案 0 :(得分:1)

听起来你可能会遇到#1的最小字符数问题。请查看使用EdgeNgramField而不是典型CharField显示方法的Haystack documents for autocomplete