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

Программы на Python
Anonymous
Невозможно индексировать модели из Django в Elasticsearch

Сообщение Anonymous »

У меня есть проект Django, в котором мы собираемся использовать Elasticsearch для полнотекстового поиска. У меня есть задача связать его с существующим проектом Django. Первым делом я нашел пакет django-elasticsearch-dsl. Я сделал все как в уроке и все работало нормально, но идея заключалась в использовании elasticsearch-dsl. Я сейчас не понимаю, как создавать индексы. Если в django-elasticsearch-dsl единственное, что мне нужно, это запустить python3 Manage.py search_index --rebuild внутри контейнера Django, но здесь я понятия не имею. Я храню весь код в файле document.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}
Итак, вопрос:
  • Как создать и заполнить индекс (особенно если в базе данных много данных, и я собираюсь массово их индексировать)?
  • Хороший ли подход использовать elasticsearch-dsl вместо django-elasticsearch-dsl в проекте Django?


Подробнее здесь: https://stackoverflow.com/questions/784 ... sticsearch

Вернуться в «Python»