【问题标题】:Django Haystack Elasticsearch returning everything on development server but works in shellDjango Haystack Elasticsearch 返回开发服务器上的所有内容,但在 shell 中工作
【发布时间】: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


【解决方案1】:

我认为您设置视图和从 haystack 继承的方式可能存在问题。您可以逐字尝试以下内容:

from haystack.views import SearchView
from haystack.query import SearchQuerySet
class MySearchView(SearchView):

    def get_results(self):
        return SearchQuerySet().auto_query('john')

【讨论】:

  • 刚刚做了并得到了相同的结果,获取每个索引数据。
【解决方案2】:

我看到了同样的问题,我环顾四周试图了解它发生的原因。我找到的最接近解决方案的是:http://tech.marksblogg.com/query-elasticsearch-from-google-app-engine-gae.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2017-11-17
    • 2013-02-08
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多