Ошибка NewConnectionError(Объект HttpConnection в 0x7f09b9f0a7c0>: не удалось установить новое соединение: [Ошибка 111] Соединение отклонено)

#python #django #elasticsearch #django-rest-framework #document

#python #django #elasticsearch #django-rest-framework #документ

Вопрос:

Я пытаюсь создать простой поиск django elastice, который может искать автомобили. Но когда я пытаюсь повторно объединить индексы, это выдает мне ошибку, указанную выше. Я следую этому документу -> quickstart elasticsearch …полная обратная трассировка приведена ниже->

 elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnection object at 0x7f09b9f0a7c0>: Failed to establish a new connection: [Errno 111] Connection refused) caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f09b9f0a7c0>: Failed to establish a new connection: [Errno 111] Connection refused)
  

мой models.py это простая модель автомобиля, имеющая название, цвет, описание, тип полей, которые я добавляю в документ

 class Car(models.Model):
    name = models.CharField(max_length=50)
    color = models.CharField(max_length=50)
    description = models.TextField()
    type = models.IntegerField(choices=[
        (1, "Sedan"),
        (2, "Truck"),
        (4, "SUV"),
    ])
  

мой documents.py файл->

 from django_elasticsearch_dsl import Document
from django_elasticsearch_dsl.registries import registry
from .models import Car


@registry.register_document
class CarDocument(Document):
    class Index:
        name = 'cars'
        settings = {'number_of_shards': 1,
                    'number_of_replicas': 0}

    class Django:
        model = Car

        fields = [
            'name',
            'color',
            'description',
            'type',
        ]
  

но когда я пытаюсь повторно создать индекс, он выдает новую ошибку подключения. Команда, которую я использую для восстановления индекса, приведена ниже ->

 python manage.py search_index --rebuild
  

Ответ №1:

Прежде всего, убедитесь, что вы правильно установили и настроили службу ElasticSearch (вы можете использовать этот документ).Эта ошибка говорит о том, что ваш код не может подключиться к ElasticSearch службе с вашими текущими конфигурациями. Проверьте, запущен ли и работает ли ваш эластичный сервис. В ОС на базе Linux вы можете проверить это, $ sudo systemctl status elasticsearch.service и на странице результатов вы должны увидеть строку Active: active (running) . После этого шага проверьте URL http://localhost:9200/ (если вы не изменили настройки по умолчанию), и если все в порядке, вы должны увидеть следующие результаты:

 {
  "name" : "some_name-System-Product-Name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "erP_jdhLRvuwqLkx1_tehw",
  "version" : {
    "number" : "7.9.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "a479a2a7fce0389512d6a9361301708b92dff667",
    "build_date" : "2020-08-11T21:36:48.204330Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
  

Вы также можете запустить эту службу с помощью $ sudo systemctl start elasticsearch.service . Другая возможность заключается в том, что, возможно, вы неправильно настроили эластичные переменные. Например, вместо порта по умолчанию (т.Е. 9200) Использование неправильного порта также вызовет ту же ошибку. В следующем примере вы можете увидеть пример эластичных конфигураций, которые будут использоваться в вашем проекте settings.py :

 # ElasticSearch configs
ELK_BASE_URL = 'elasticsearch://{username}:{password}@{host_ip}:{host_port}'
ELASTIC_SEARCH_URL = ELK_BASE_URL.format(
    username='ELASTICSEARCH_USER',
    password='ELASTICSEARCH_PASS',
    host_ip='ELASTICSEARCH_HOST',
    host_port='ELASTICSEARCH_PORT'
)
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': [ELASTIC_SEARCH_URL]
    },
}