我有默认的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),所以我无法理解发生了什么。
经过一点点搜索后,我发现堆栈溢出的线程很少,建议使用Ngram
或EdgeNgram
,但这些线程也无法工作。(我重建了整个索引)。我甚至在过滤器中尝试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))