Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 3.x 向Elasticsearch索引添加字段_Python 3.x_Django_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Python 3.x,Django,elasticsearch" /> elasticsearch,Python 3.x,Django,elasticsearch" />

Python 3.x 向Elasticsearch索引添加字段

Python 3.x 向Elasticsearch索引添加字段,python-3.x,django,elasticsearch,Python 3.x,Django,elasticsearch,我正在使用来构建elasticsearch索引,我想动态添加MySQL模式中不存在的字段(到创建的索引cars) 我基于并添加了网站,以说明我想要实现的目标 Manufacturer ----< Car ----< Ad ----< Website 下面是我使用的代码的一个简单示例: model.py documents.py $ python manage.py search_index --rebuild -f Deleting index '<elasticsea

我正在使用来构建elasticsearch索引,我想动态添加MySQL模式中不存在的字段(到创建的索引
cars

我基于并添加了
网站
,以说明我想要实现的目标

Manufacturer ----< Car ----< Ad ----< Website
下面是我使用的代码的一个简单示例:

model.py documents.py
$ python manage.py search_index --rebuild -f
Deleting index '<elasticsearch_dsl.index.Index object at 0x10baeb3a0>'
Creating index '<elasticsearch_dsl.index.Index object at 0x10baeb3a0>'
Indexing 1 'Car' objects
Traceback (most recent call last):
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/fields.py", line 52, in get_value_from_instance
    instance = instance[attr]
TypeError: 'Car' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/fields.py", line 58, in get_value_from_instance
    instance = getattr(instance, attr)
AttributeError: 'Car' object has no attribute 'website'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/fields.py", line 63, in get_value_from_instance
    instance = instance[int(attr)]
ValueError: invalid literal for int() with base 10: 'website'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/management/commands/search_index.py", line 134, in handle
    self._rebuild(models, options)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/management/commands/search_index.py", line 115, in _rebuild
    self._populate(models, options)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/management/commands/search_index.py", line 92, in _populate
    doc().update(qs)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/documents.py", line 162, in update
    return self.bulk(
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/documents.py", line 123, in bulk
    return bulk(client=self._get_connection(), actions=actions, **kwargs)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/elasticsearch/helpers/actions.py", line 297, in bulk
    for ok, item in streaming_bulk(client, actions, *args, **kwargs):
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/elasticsearch/helpers/actions.py", line 208, in streaming_bulk
    for bulk_data, bulk_actions in _chunk_actions(
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/elasticsearch/helpers/actions.py", line 60, in _chunk_actions
    for action, data in actions:
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/documents.py", line 146, in _get_actions
    yield self._prepare_action(object_instance, action)
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/documents.py", line 132, in _prepare_action
    self.prepare(object_instance) if action != 'delete' else None
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/documents.py", line 98, in prepare
    field_value = field.get_value_from_instance(
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/fields.py", line 120, in get_value_from_instance
    objs = super(ObjectField, self).get_value_from_instance(
  File "/Users/user/git/django_es_dsl/dedsl_env/lib/python3.8/site-packages/django_elasticsearch_dsl/fields.py", line 68, in get_value_from_instance
    raise VariableLookupError(
django_elasticsearch_dsl.exceptions.VariableLookupError: Failed lookup for key [website] in <Car: Car object (1)>
from django.db import models


class Car(models.Model):
    name = models.CharField(max_length=100)
    manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE, null=True)


class Manufacturer(models.Model):
    name = models.CharField(max_length=100)


class Ad(models.Model):
    title = models.CharField(max_length=100)
    url = models.URLField(null=True)
    car = models.ForeignKey('Car', related_name='ads', on_delete=models.CASCADE)


class Website(models.Model):
    name = models.CharField(max_length=100)
    url = models.URLField(null=True)
    ad = models.ForeignKey('Ad', related_name='website', on_delete=models.CASCADE)
from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl.registries import registry
from elasticsearch_dsl import analyzer

from .models import Car, Manufacturer, Ad, Website


@registry.register_document
class CarDocument(Document):
    manufacturer = fields.ObjectField(properties={
        'name': fields.TextField(),
    })
    ads = fields.NestedField(properties={
        'title': fields.TextField(),
        'pk': fields.IntegerField(),
    })
    website = fields.ObjectField(properties={
        'name': fields.TextField(),
    })

    class Index:
        name = 'cars'

    class Django:
        model = Car
        fields = [
            'name',
        ]
        related_models = [Manufacturer, Ad]


# Adding the data
m = Manufacturer(
    id=1,
    name='manuf1',
)
m.save()

car = Car(
    id=1,
    name="Car one",
    manufacturer=m
)
car.save()

ad = Ad(
    id=1,
    title='Ads title',
    url='https://www.example.com/ads-url-goes-here',
    car=car
)
ad.save()

ws = Website(
    id=1,
    name='Ads Website',
    url='https://www.example.com',
    ad=ad
)
ws.save()