Django Настройка клиента Flexiblesearch с аутентификацией пароля - PullRequest
2 голосов
/ 09 апреля 2020
Приложение

My Django использует эластичный поиск для индексации нескольких ресурсов. Теперь я хотел защитить свой экземплярasticsearch паролем, который работает нормально, если я использую "curl -u" или около того. Как бы то ни было, в документации поasticsearch_dsl, найденной здесь: https://elasticsearch-dsl.readthedocs.io/en/latest/configuration.html, я не понимаю, что мне нужно сделать, чтобы настроитьasticsearch таким образом, чтобы он использовал пароль для аутентификации и где я должен это разместить код?! кто-л. Может быть, в состоянии пройти показать мне некоторые фрагменты его конфигурации?

Мое текущее состояние выглядит так:

settingy.py

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

ELASTICSEARCH_DSL_SIGNAL_PROCESSOR = 'django_elasticsearch_dsl.signals.RealTimeSignalProcessor'

documents.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

Согласно документам, мне нужно вручную установить клиентское соединение по умолчанию, где я также могу передать пароль и имя пользователя для аутентификации, что мне кажется невозможным в settings.py в данный момент.

С уважением

1 Ответ

3 голосов
/ 15 апреля 2020

Вы можете передать asticsearch 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]
    },
}

Это решение было протестировано при следующих обстоятельствах

  1. Django == 3.0.4
  2. django -elasticsearch-dsl == 7.1.1
  3. logsta sh == kibana ==asticsearch == 7.6.0

Если вы испытываете исключение AuthenticationException(401, ''), это означает, что вы предоставили неверные учетные данные . Пожалуйста, проверьте значение elastic_search_url и убедитесь, что значения верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...