Невозможно индексировать модели из 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}
Итак, вопрос:
- Как создать и заполнить индекс (особенно если в базе данных много данных и я собираюсь индексировать все с помощью
bulks
)? - Хорошо ли использовать
elasticsearch-dsl
вместоdjango-elasticsearch-dsl
вDjango
проекте?