简体   繁体   English

ElasticSearch, FarmHaystack, Django 连接被拒绝

[英]ElasticSearch, FarmHaystack, Django connection Refused

I'm trying to make this https://haystack.deepset.ai/docs/latest/tutorial5md into a Dockerized Django App, the problem is when I implement the code locally it works but when I make a dockerized version of it it gives me a connection refused, my guess is that the two docker images can't find their ways to each other.我正在尝试将此https://haystack.deepset.ai/docs/latest/tutorial5md 制作为 Dockerized Django 应用程序,问题是当我在本地实现代码时它可以工作,但是当我制作它的 dockerized 版本时我的连接被拒绝,我的猜测是两个 docker 图像无法找到彼此的方式。

This is my docker-compose.yaml file这是我的 docker-compose.yaml 文件

 version: '3.7'

services:
  es:
    image: elasticsearch:7.8.1
    environment:
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Dlog4j2.disable.jmx=true"
      - discovery.type=single-node
      - VIRTUAL_HOST=localhost
    ports:
      - "9200:9200"
    networks:
      - test-network
    container_name: es
    healthcheck:
      test: ["CMD", "curl", "-s", "-f", "http://localhost:9200"]
      retries: 6
  web:
    build: .
    command: bash -c "sleep 1m && python manage.py migrate && python manage.py makemigrations && python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
    networks:
      - test-network
    ports:
      - "8000:8000"
    depends_on:
      - es
    healthcheck:
      test: ["CMD", "curl", "-s", "-f", "http://localhost:9200"]
      retries: 6
networks:
  test-network:
    driver: bridge

and this is my apps.py这是我的apps.py

from django.apps import AppConfig
import logging
# from haystack.reader.transformers import TransformersReader
from haystack.reader.farm import FARMReader
from haystack.preprocessor.utils import convert_files_to_dicts, fetch_archive_from_http
from haystack.preprocessor.cleaning import clean_wiki_text
from django.core.cache import cache
import pickle
from haystack.document_store.elasticsearch import ElasticsearchDocumentStore
from haystack.retriever.sparse import ElasticsearchRetriever
from haystack.document_store.elasticsearch import ElasticsearchDocumentStore

class SquadmodelConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'squadModel'

    def ready(self):
        document_store = ElasticsearchDocumentStore(host="elasticsearch", username="", password="", index="document")
        doc_dir = "data/article_txt_got"
        s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt.zip"
        fetch_archive_from_http(url=s3_url, output_dir=doc_dir)
        dicts = convert_files_to_dicts(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)
        document_store.write_documents(dicts)
        reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True)
        document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="document")
        retriever = ElasticsearchRetriever(document_store=document_store)
        self.reader = reader
        self.retriever = retriever

my views.py我的意见.py

from django.apps import apps as allApps
from rest_framework.decorators import api_view
from rest_framework.response import Response
from haystack.pipeline import ExtractiveQAPipeline

theApp = allApps.get_app_config('squadModel')
reader = theApp.reader
retreiver = theApp.retriever

@api_view(['POST'])
def respondQuestion(request):
    question = request.data["question"]
    pipe = ExtractiveQAPipeline(reader, retreiver)
    prediction = pipe.run(query=question, top_k_retriever=10, top_k_reader=5)
    content = {"prediction": prediction}
    return Response(content)

again this Django API works perfectly locally with an elastic search docker image but in this config i can't manage to make it work.再次,此 Django API 与弹性搜索 docker 图像在本地完美配合,但在此配置中我无法使其工作。 Any help?有什么帮助吗?

As suggested by @leandrojmp, just needed to change "localhost to "es" on the apps.py thanks a lot !正如@leandrojmp 所建议的,只需要在apps.py 上将“localhost”更改为“es”,非常感谢!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM