Django 使用密码身份验证设置 elasticsearch 客户端

5 django elasticsearch

我的 Django 应用程序使用 elasticsearch 来索引多个资源。现在我想用密码保护我的elasticsearch实例,如果我使用“curl -u”左右,它就可以正常工作。无论如何,从这里找到的elasticsearch_dsl文档中: https: //elasticsearch-dsl.readthedocs.io/en/latest/configuration.html,我不明白我必须做什么才能以使用密码的方式设置elasticsearch为了进行身份验证,我必须将该代码放在哪里?!是smb。也许可以向我展示他的一些配置片段?

我现在的状态是这样的:

设置.py

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': env.str('ELASTICSEARCH_HOST') + str(':') + env.str('ELASTICSEARCH_PORT'),
    },
}

ELASTICSEARCH_DSL_SIGNAL_PROCESSOR = 'django_elasticsearch_dsl.signals.RealTimeSignalProcessor'
Run Code Online (Sandbox Code Playgroud)

文档.py

from django_elasticsearch_dsl import Document, Index, fields
from elasticsearch_dsl import analyzer
from App.models import Post


# elasticsearch index
posts = Index('posts')

html_strip = analyzer(
    'html_strip',
    tokenizer="standard",
    filter=["lowercase", "stop", "snowball"],
    char_filter=["html_strip"]
)


@posts.document
class PostDocument(Document):

... more index stuff
Run Code Online (Sandbox Code Playgroud)

根据文档,我必须手动设置默认客户端连接,在其中我还可以传递密码和用户名进行身份验证,这在我看来目前在 settings.py 中是不可能的。

亲切的问候

JPG*_*JPG 8

您可以将elasticsearch URL传递为

from urllib.parse import quote_plus as urlquote

elk_base_url = 'elasticsearch://{user_name}:{password}@{host_ip}:{host_port}'
elastic_search_url = elk_base_url.format(user_name='my_username',
                                         password=urlquote('mysecret_password'),
                                         # password may contain special characters
                                         host_ip='my-elastic-host-ip',
                                         host_port=9200)
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': [elastic_search_url]
    },
}
Run Code Online (Sandbox Code Playgroud)

该解决方案已经在以下情况下进行了测试

  1. 姜戈==3.0.4
  2. django-elasticsearch-dsl==7.1.1
  3. Logstash == kibana == elasticsearch == 7.6.0

如果您遇到AuthenticationException(401, '')异常,则意味着您提供了错误的凭据。请检查 的值elastic_search_url并确保这些值正确。

  • 经过对 github 社区的大量调试,我找到了一个可行的解决方案:https://github.com/elastic/elasticsearch-dsl-py/issues/1338 再次感谢大家。 (2认同)