django - 使用 ElasticSearch 作为 Django 的数据库/存储

标签 django database elasticsearch

我正在尝试在我的 Django 项目中使用 ElasticSearch 作为 NoSQL 数据库。 目标是在另一侧插入 Kibana 并能够在那里可视化我的数据。

我无法选择添加另一个数据库并仅使用 ElasticSearch 进行索引,因为我的项目正在插入现有基础架构。

所以我安装了以下两个模块:

  • django-haystack
  • Elasticsearch

我原以为不需要 SQLite(或任何其他数据库)进行存储,而是将 ElasticSearch 用作 NoSQL 存储(这是错误的吗?)

我将 Haystack 连接设置添加到我的项目设置中,然后试图摆脱“DATABASES”或将其替换为指向我的 ElasticSearch 的值,但没有成功:(

这是我坚持的:

设置.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack'
    },
}

根据我在 StackOverflow 和代码片段中找到的所有答案,我永远不会看到这些 DATABASES 设置发生变化,所以我假设人们使用数据库进行存储,而 ElasticSearch 仅用于他们的搜索引擎/索引,这不是我想要的为。

有没有一种方法可以将 ElasticSearch 作为我的存储数据库(就像我使用 MongoDB 一样),而不破坏 Django 的模型和接口(interface)?

最佳答案

不可能(正式)使用 ElasticSearch 作为您的 django 数据库后端(我假设这就是您想要的)- 当前支持的后端是:

  • PostgreSQL
  • 数据库
  • sqlite3
  • 甲骨文

以上为官方名单,非官方(第3方)如下:

  • SAP SQL
  • IBM DB2
  • 微软 SQL
  • Firebird
  • ODBC

无论如何,django 周围的人都是非常友善和勤奋的开发人员 :) 并且有相应的软件包(您可以尝试一下 - 以前从未使用过):

https://github.com/aparo/django-elasticsearch

还有一件事 - 为什么需要 Django? kibana 还不够吗?您要对 Django 应用程序中 ES 索引的数据进行一些更改吗?或者它应该只是只读的?

因为如果您想像普通 DB 存储一样使用 ES - 它不会工作,因为每次更新/插入数据时您将等待大约 1-2 秒,直到 ES 索引新数据.这不是 ES 的目的。

希望这对您有所帮助,编码愉快。

关于django - 使用 ElasticSearch 作为 Django 的数据库/存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40948923/

相关文章:

python - Django Tastypie : Filtering by ForeignKey

database - 使用 Talend 从两个表插入 CSV 文件

elasticsearch - Elasticsearch 汇总作业

django - 如何使用 ChannelNameRouter 在 Worker 和 Websocket(Django 和 Channels2.x)之间进行通信?

python - 通过序列化器创建多模型实例怎么样?

python - 带有 Elasticsearch 后端的 Django Haystack

sql - 在 sql 数据库 vb.net 中插入数据未被存储

database - 使用关系数据库表示图形

python - 如何使用 API key 和 python 库正确连接到 Elasticsearch 云?

elasticsearch - 使用Logstash在ElasticSearch中加载CSV