Невозможно индексировать модели из Django в Elasticsearch

У меня есть проект Django, в котором мы собираемся использовать Elasticsearch для полнотекстового поиска. У меня есть задача связать его с существующим проектом Django. Первым делом я нашел пакет django-elasticsearch-dsl. Сделал все как в туториале и все заработало, но идея была в использовании elasticsearch-dsl. Я не понимаю, как сейчас создавать индексы. Если в django-elasticsearch-dsl, то единственное, что мне нужно, это запустить python3 manage.py search_index --rebuild внутри контейнера Django, но здесь у меня нет идей. Весь код я храню в documents.py.

documents.py

from elasticsearch_dsl.connections import connections
from elasticsearch_dsl import Document, Text

connections.create_connection(hosts=['http://elasticsearch:9200'])

class FilmWorkDocument(Document):
    title = Text()
    description = Text()

    class Index:
        name = 'film'
    
FilmWorkDocument.init()

first = FilmWorkDocument(title='Example1', description='Example description')
first.meta.id = 47
first.save()

docker-compose.yml

elasticsearch:
    image: elasticsearch:8.13.0
    container_name: elasticsearch
    environment:
      - "ES_JAVA_OPTS=-Xms200m -Xmx200m"
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - 9200:9200

Отправка запроса http://localhost:9200 показывает, что все в порядке.

{
  "name" : "eeb958274241",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "wUQjIKoLTNGKtFH7A1tzSw",
  "version" : {
    "number" : "8.13.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "09df99393193b2c53d92899662a8b8b3c55b45cd",
    "build_date" : "2024-03-22T03:35:46.757803203Z",
    "build_snapshot" : false,
    "lucene_version" : "9.10.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Но после отправки запроса http://localhost:9200/film/ он показывает, что индекс не существует.

{"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [film]","resource.type":"index_or_alias","resource.id":"film","index_uuid":"_na_","index":"film"}],"type":"index_not_found_exception","reason":"no such index [film]","resource.type":"index_or_alias","resource.id":"film","index_uuid":"_na_","index":"film"},"status":404}

Итак, вопрос:

  1. Как создать и заполнить индекс (особенно если в базе данных много данных и я собираюсь индексировать все с помощью bulks)?
  2. Хорошо ли использовать elasticsearch-dsl вместо django-elasticsearch-dsl в Django проекте?
Вернуться на верх