【发布时间】:2014-07-07 19:54:02
【问题描述】:
在我的本地机器上安装 elasticsearch 服务器并运行开发服务器后,我发现任何查询都会返回每个索引。但是,当我在 shell 中检查以确保所有内容都被正确索引时,它可以完美地工作。当我强制haystack.views.SearchView返回查询结果时问题依然存在:
class SearchView(object):
template = 'search/search.html'
extra_context = {}
query = ''
results = EmptySearchQuerySet()
request = None
form = None
results_per_page = RESULTS_PER_PAGE
def get_results(self):
return SearchQuerySet().auto_query('john')
将每个索引数据返回到模板。
另一方面:
$ ./manage.py shell
>>> from haystack.query import SearchQuerySet
>>> SearchQuerySet().all()
[<SearchResult: custom_user.user (pk=u'1')>, <SearchResult: custom_user.user (pk=u'2')>, <SearchResult: custom_user.user (pk=u'3')>, u'...(remaining elements truncated)...']
>>> SearchQuerySet().auto_query('john')
[<SearchResult: custom_user.user (pk=u'1')>]
如果这很重要,我正在使用 GAE dev_appserver.py。以下是我使用的其他文件。
myapp/settings.py
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://localhost:9200/',
'INDEX_NAME': 'haystack',
},
}
custom_user/search_indexes.py
# -*- coding: utf-8 -*-
from haystack import indexes
from .models import User
class UserIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
username = indexes.CharField(model_attr='username')
nickname = indexes.CharField(model_attr='nickname')
def get_model(self):
return User
def index_queryset(self, using=None):
return self.get_model().objects.filter(is_active=True).order_by('nickname')
【问题讨论】:
-
您是否尝试过仅从 Haystack 的 SearchView 继承?例如,
class MySearchView(haystack.views.SearchView) -
我尝试自定义'def basic_search()'。
标签: python django google-app-engine elasticsearch django-haystack