Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 干草堆索引错误_Python_Django_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Django Haystack - Fatal编程技术网 elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack" /> elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack" />

Python 干草堆索引错误

Python 干草堆索引错误,python,django,elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack,我正在尝试实现haystack: 但我面临的问题是: 如果我的数据库中已有数据,并尝试使用以下方法建立索引: python manage.py rebuild\u index它给出以下错误: vaibhav@ubuntu:~/temp/HayStackDemo$ python manage.py rebuild_index -v2 WARNING: This will irreparably remove EVERYTHING from your search index in connect

我正在尝试实现haystack: 但我面临的问题是:

如果我的数据库中已有数据,并尝试使用以下方法建立索引:

python manage.py rebuild\u index
它给出以下错误:

vaibhav@ubuntu:~/temp/HayStackDemo$ python manage.py rebuild_index -v2

WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
Are you sure you wish to continue? [y/N] y

Removing all documents from your index because you said so.
All documents removed.
Skipping '<class 'django.contrib.auth.models.Permission'>' - no index.
Skipping '<class 'django.contrib.auth.models.Group'>' - no index.
Skipping '<class 'django.contrib.auth.models.User'>' - no index.
Skipping '<class 'django.contrib.contenttypes.models.ContentType'>' - no index.
Skipping '<class 'django.contrib.sessions.models.Session'>' - no index.
Skipping '<class 'django.contrib.sites.models.Site'>' - no index.
Skipping '<class 'django.contrib.admin.models.LogEntry'>' - no index.
Indexing 1 notes
  indexed 1 - 1 of 1 (by 30508).
ERROR:root:Error updating demoApp using default 
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 210, in handle_label
    self.update_backend(label, using)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 256, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 78, in do_update
    backend.update(index, current_qs)
  File "/usr/local/lib/python2.7/dist-packages/haystack/backends/elasticsearch_backend.py", line 155, in update
    prepped_data = index.full_prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 196, in full_prepare
    self.prepared_data = self.prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 187, in prepare
    self.prepared_data[field.index_fieldname] = field.prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 152, in prepare
    return self.convert(super(CharField, self).prepare(obj))
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 73, in prepare
    return self.prepare_template(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 129, in prepare_template
    t = loader.select_template(template_names)
  File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 193, in select_template
    raise TemplateDoesNotExist(', '.join(not_found))
TemplateDoesNotExist: search/indexes/demoApp/note_text.txt
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/rebuild_index.py", line 15, in handle
    call_command('update_index', **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 150, in call_command
    return klass.execute(*args, **defaults)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 184, in handle
    return super(Command, self).handle(*items, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 341, in handle
    label_output = self.handle_label(label, **options)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 210, in handle_label
    self.update_backend(label, using)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 256, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 78, in do_update
    backend.update(index, current_qs)
  File "/usr/local/lib/python2.7/dist-packages/haystack/backends/elasticsearch_backend.py", line 155, in update
    prepped_data = index.full_prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 196, in full_prepare
    self.prepared_data = self.prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 187, in prepare
    self.prepared_data[field.index_fieldname] = field.prepare(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 152, in prepare
    return self.convert(super(CharField, self).prepare(obj))
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 73, in prepare
    return self.prepare_template(obj)
  File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 129, in prepare_template
    t = loader.select_template(template_names)
  File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 193, in select_template
    raise TemplateDoesNotExist(', '.join(not_found))
django.template.base.TemplateDoesNotExist: search/indexes/demoApp/note_text.txt
我也尝试过使用这个类和方法,但没有任何效果

import datetime
from haystack import indexes
from demoApp.models import Note

#------------------------------------------------------------------------------ 


#All Fields
class AllNoteIndex(indexes.ModelSearchIndex, indexes.Indexable):
     class Meta:
         model = Note
这是:

import datetime
from haystack import indexes
from demoApp.models import Note

#------------------------------------------------------------------------------ 

class NoteIndex(indexes.SearchIndex, indexes.Indexable):

    author = indexes.CharField(model_attr='user')
    pub_date = indexes.DateTimeField(model_attr='pub_date')
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        return Note

def load_all_queryset(self):
    # Pull all objects related to the Note in search results.
    return Note.objects.all().select_related()
但每次都是同一个问题。如果我更改项目设置文件中的时区设置,并再次尝试更新或重建索引,则会出现此错误

我的目录结构:

vaibhav@ubuntu:~/temp/HayStackDemo$ tree
.
├── demoApp
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── search_indexes.py
│   ├── search_indexes.pyc
│   ├── templates
│   │   └── search
│   │       ├── indexes
│   │       │   └── demoApp
│   │       │       └── note_text.txt 
│   │       └── search.html
│   ├── tests.py
│   └── views.py
├── HayStackDemo
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
└── sqlite.db
设置.py

# Django settings for HayStackDemo project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '/home/vaibhav/temp/HayStackDemo/sqlite.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'
#'Asia/Kolkata'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = 'kg5kd%92#5*ybo-$92ci$u349s$1*xhmhnq68!oue%r=^fq#yz'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'HayStackDemo.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'HayStackDemo.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',    
    'haystack',
    'demoApp',
)

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack',
    },
}

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

您定义了文件系统加载器,但忘了在TEMPLATE_DIRS中定义templates目录

或者,您可以将模板移动到应用程序目录下,而不是移动模板/

class PersonIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True, template_name="person_text.txt")
    name = indexes.CharField(model_attr='name')

    def get_model(self):
        return Person
必须添加模板的名称,否则将使用默认路径

template_name="person_text.txt"
上面是加载模板的代码

'search/indexes/%s/%s_%s.txt'
模板搜索路径上方(已格式化名称)

在应用程序的模板目录中,创建以下结构:


'search/index/{app name}/note_text.txt'

我遇到了类似的问题。问题是我没有在模板目录中添加文件。在其中一个模板文件夹中添加“search/index/demoApp/note_text.txt”文件。如果您正在使用pycharm,请转到pycharm->Preferences->Languages&Framework->Django->Show Structure,屏幕如下所示,您可以查看模板文件夹。因此,在应用程序模板文件夹中创建目录结构“search/indexes/demoApp”,并将该文件添加到其中。


错误表明您尚未定义模板。您是否定义了此模板
search/index/demoApp/note_text.txt
?搜索
此外,我们在您链接到的教程页面上提供了
,您将看到一个段落,告诉您为什么需要定义模板文件。添加了my Dir结构,请查看您的模板加载程序包含的
'django.template.loaders.app_directories.Loader'
。想知道是否可以找到此模板?此处的问题不是模板问题,因为。第一个模板存在,第二个当haystack索引0注释时,正如我前面提到的,那么为什么它没有显示错误…是的
'django.template.loaders.app\u directories.Loader'
存在于我的settings.py文件中,我可以在浏览器中打开search.html…没有任何困难…django默认情况下在app文件夹下查找模板文件夹。。。。。如果您没有定义。。。。。如果是这样的话。。。。正如我已经提到的,我能够打开search.html,它位于我的应用程序中模板文件夹内的search DIR下。。。。。没有定义它…无论如何,我尝试了你的解决方案,但同样的问题。。。如果我将数据插入数据库并尝试重建索引,我会得到相同的错误。。。
template_name="person_text.txt"
    def prepare_template(self, obj):
    """
    Flattens an object for indexing.

    This loads a template
    (``search/indexes/{app_label}/{model_name}_{field_name}.txt``) and
    returns the result of rendering that template. ``object`` will be in
    its context.
    """
    if self.instance_name is None and self.template_name is None:
        raise SearchFieldError("This field requires either its instance_name variable to be populated or an explicit template_name in order to load the correct template.")

    if self.template_name is not None:
        template_names = self.template_name

        if not isinstance(template_names, (list, tuple)):
            template_names = [template_names]
    else:
        template_names = ['search/indexes/%s/%s_%s.txt' % (obj._meta.app_label, obj._meta.module_name, self.instance_name)]

    t = loader.select_template(template_names)
    return t.render(Context({'object': obj}))
'search/indexes/%s/%s_%s.txt'