带有elasticsearch的Django haystack SearchQuerySet返回None

时间:2016-02-15 19:43:48

标签: django elasticsearch django-haystack

我有默认的django用户模型,我想使用elasticsearch进行索引 我正在使用django-haystack。

settings.py

中的

HAYSTACK_SEARCH_RESULTS_PER_PAGE = 12
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' 
HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
            'URL': 'http://127.0.0.1:9200/',
            'INDEX_NAME': 'haystack',
        },
}
search_indexes.py

中的

import datetime
from haystack import indexes
from django.contrib.auth.models import User


class UserIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True)
    first_name = indexes.CharField(model_attr='first_name', null=True)
    last_name = indexes.CharField(model_attr='last_name', null=True)

    def get_model(self):
        return User

    def index_queryset(self, using=None):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.all()

使用python manage.py rebuild_index

构建索引

现在在shell

from haystack.query import SearchQuerySet
SearchQuerySet().all()

它返回所有索引对象(我可以确认计数与db中的条目数相同)

当我这样做的时候 SearchQuerySet().filter(first_name='Wendy')它返回两个结果对象,这也是预期的。

但是当我尝试SearchQuerySet().filter(content='Wendy')时,它会返回None。

基本上我想创建一个API,我们可以在其中传递一个查询参数,并在任何字段中返回包含此查询字符串的所有用户对象。 http://localhost/search/?q=Wendy

这是我第一次使用Elasticsearch或(任何搜索引擎与haystack),所以我无法理解发生了什么。

经过一点点搜索后,我发现堆栈溢出的线程很少,建议使用NgramEdgeNgram,但这些线程也无法工作。(我重建了整个索引)。我甚至在过滤器中尝试content_auto但没有成功。

任何帮助或领导都将不胜感激。 我正在关注这个官方文档。 http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#quick-start

PS:我在这里只写了两个字段(firstname,lastname),但在我的实际代码中还有几个字段。它只是写在这里。

PPS:我正在使用Django 1.9。这可能是一个问题吗?

这就是我的观点

def search_api(request):
    query = request.GET.get('q')
    sqs = SearchQuerySet().filter(content=query)
    data = map(lambda x: x.get_stored_fields(), sqs)
    return HttpResponse(json.dumps(data))

0 个答案:

没有答案