为什么我的 Elasticsearch 请求没有显示任何命中?

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

我已经对

Django
项目进行了 docker 化。我想用
Elasticsearch
,所以我选择了
django-elasticsearch-dsl
。我的步骤是:

  1. 在我的 Django 项目的设置文件 (
    settings.py
    ) 中,我配置了 Elasticsearch 连接设置。
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': ["http://localhost:9200"],
    },
}
  1. 创建了一个名为
    documents.py
    我的 Django 应用程序的文件。在此文件中,我定义了与我的 Django 模型相对应的
    Elasticsearch
    文档。
from django_elasticsearch_dsl import Document
from django_elasticsearch_dsl.registries import registry


from .models import Filmwork

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

    class Django:
        model = Filmwork 
        fields = ['title', 'description']
  1. 然后我使用命令
    python3 manage.py search_index --rebuild
    将 Django 模型中的数据索引到 Elasticsearch 中。我在
    docker
    之外使用了这个命令,它显示:
File "/Users/ArtemBoss/Desktop/artem_yandex_repo/venv/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name "database" to address: nodename nor servname provided, or not known

同时,当我尝试在

django
容器内索引数据时,它显示:

File "/usr/local/lib/python3.10/site-packages/elastic_transport/_node/_http_urllib3.py", line 202, in perform_request
    raise err from None
elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f9150762b60>: Failed to establish a new connection: [Errno 111] Connection refused))

无论如何索引已成功创建,但是当我发送请求时

http://localhost:9200/film
它显示没有命中,就像没有文档一样:

{"film":{"aliases":{},"mappings":{"properties":{"description":{"type":"text"},"title":{"type":"text"}}},"settings":{"index":{"routing":{"allocation":{"include":{"_tier_preference":"data_content"}}},"number_of_shards":"1","provided_name":"film","creation_date":"1714573697677","number_of_replicas":"0","uuid":"wtFsSoZUSXC73s5ScCbc2w","version":{"created":"8503000"}}}}}

有什么问题吗?

python django docker elasticsearch
1个回答
0
投票

据我所知,postgres 和 elastic 也作为容器运行,可能作为

docker-compose
服务运行。

第一个错误(当您尝试索引在主机上运行

search_index --rebuild
的记录时)表明它找不到数据库。从第二个错误开始,我收集到数据库设置已正确定义为引导 django,并且在容器之间设置了网络。

您需要更新弹性设置,以便可以从 django 容器访问弹性。像下面这样的事情就可以了:

ELASTIC_HOST = "<name of the elastic service>"
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': [f"http://{ELASTIC_HOST}:9200"],
    },
}
© www.soinside.com 2019 - 2024. All rights reserved.