Django:在单个应用程序中使用 MySQL 和 ElasticSearch

Django: Use MySQL and ElasticSearch in single application

我想在单个 Django 应用程序中使用 MySQLElasticSearch 使用 Haystack。我们的应用程序处理大量包含 300 多个表的关系数据,MySql 是服务该数据的最佳选择。但是我们想要快速搜索具有 1000 万行以上的表的几列。

在 Django 中是否可以使用 MySQL 作为主要数据存储并使用 ElasticSearch 进行搜索相关查询? 我在互联网上搜索但找不到任何相关信息。

是的,这绝对有可能。我自己实现了带有 elasticSearch 后端和 mysql 数据库的 haystack。查看 haystack 文档作为起点 http://django-haystack.readthedocs.org/en/v2.4.1/tutorial.html

只需安装 haystack,将其添加到您已安装的应用程序中。然后你需要定义弹性搜索作为你的后端。 之后,创建搜索索引并添加要搜索的字段。 我不确定你的困惑是什么,通过教程,它非常简单。

是的,我们可以在单个 Django 项目中配置 MySQLElasticSearch。首先从 pip.

安装 django-haystackpyelasticsearch
sudo pip install django-haystack
sudo pip install pyelasticsearch 

settings.py 中,将 'haystack' 添加到 INSTALLED_APPS 并配置 HAYSTACK_CONNECTIONS 如:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://<ip-of-redis-server>:9200/',
        'TIMEOUT': 60 * 5,
        'INCLUDE_SPELLING':True,
        'INDEX_NAME': '<name-of-index>'
        }
    }

创建一个 class 继承 hystack.indexes.SearchIndexhystack.indexes.Indexable classes。在下面的示例代码中,索引是在 MyModelClass 模型的字段上创建的:

from haystack import indexes


class MyIndexClass(indexes.SearchIndex, indexes.Indexable):
    field_1 = indexes.CharField(document=True, use_template=True)
    field_2 = indexes.CharField(model_attr='field_of_MyModelClass_class')
    field_3 = indexes.CharField(model_attr='field_of_MyModelClass_class')

def get_model(self):
    return MyModelClass

有关详细信息,请参阅 HayStack 文档。