NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f09b9f0a7c0>:无法建立新连接:[Errno 111]连接被拒绝)

问题描述 投票:0回答:2

我正在尝试构建一个简单的 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
python django elasticsearch django-rest-framework document
2个回答
2
投票

首先确保您已正确安装和配置 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)也会引发相同的错误。在下面的示例中,您可以看到一个 Elastic 配置示例,它将出现在您项目的
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]
    },
}

0
投票

我面临着同样的错误。但我在 docker-containers 中使用了 ES。因此,如果您遇到此错误,有些事情对我有帮助:

docker-compose.yml 文件中

elasticsearch服务的环境变量:

environment: - xpack.security.enabled=false - discovery.type=single-node - network.host=0.0.0.0 - http.port=9200
您还应该尝试将 docker-compose.yml 中的所有内容(服务)置于同一个网络下
请在部署之前

注意环境中的第一行。

© www.soinside.com 2019 - 2024. All rights reserved.