Django集成elasticsearch执行search_index --rebuild报连接拒绝错误
Django接入Elasticsearch连接被拒绝问题解决方法
- 第一步:确认Elasticsearch服务正常运行
报错核心原因为Django无法与Elasticsearch服务建立连接,首先要校验本地ES服务状态:
Windows环境下如果使用压缩包安装ES,进入ES安装目录的bin文件夹,双击运行elasticsearch.bat,等待服务启动完成后,在浏览器访问http://localhost:9200,如果返回类似以下JSON数据则证明服务启动正常:
如果将ES安装为Windows系统服务,打开系统服务列表,找到Elasticsearch服务,确认运行状态为「正在运行」即可。{ "name" : "node-1", "cluster_name" : "elasticsearch", "cluster_uuid" : "test-uuid", "version" : { "number" : "7.17.0", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "bee86328705acaa9a6daede7140afc5d23550275", "build_date" : "2022-01-28T08:36:04.875279988Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } - 第二步:核对ES连接配置
若你修改过ES的默认配置,需要同步更新Django settings.py中的连接参数:- 若ES监听端口不是默认的9200,将
ELASTICSEARCH_DSL配置里的端口修改为实际监听端口 - 若开启了ES身份验证,需要补充账号密码配置,示例如下:
ELASTICSEARCH_DSL={ 'default': { 'hosts': 'localhost:9200', 'http_auth': ('elastic', '你设置的ES登录密码') } }- 若ES开启了HTTPS访问,需要额外补充
scheme: 'https'和SSL证书相关配置。
- 若ES监听端口不是默认的9200,将
- 第三步:检查端口拦截规则
本地Windows防火墙、第三方安全防护软件可能会拦截9200端口的本地访问,可暂时关闭相关软件测试,或者将9200端口加入允许访问的白名单。 - 额外优化提示
你当前documents.py中的文档类命名为CarDocument,但关联的是Product模型,属于命名不规范问题,虽然不会导致连接报错,但建议修改为ProductDocument提升代码可读性。
内容的提问来源于stack exchange,提问作者Knight
相关产品推荐
相关产品推荐

