围绕ElasticsearchDSL的DRF包装
drf-elasticsearch-dsl的Python项目详细描述
DRF Elasticsearch DSL是基于django-haystack的,它提供了一个ModelSerializerDocument 它支持elastic-search-dsl persistence提供的所有字段类型。。ModelSerializerDocument基于elasticsearch-dsl.py提供的DocType类
这个库的目的是允许使用DRF的ModelSerializer类定义elasticsearch文档,同时还可以选择使用celery支持异步文档更新和删除。在
文件
快速启动
安装Django包:
pip install drf-elasticsearch-dsl
将其添加到已安装的应用程序中:
^{pr2}$在您的设置.py使用elasticsearch url文件
DRF_SERIALIZER_ELASTICSERACH_SETTTINGS={'elasticsearch_hosts':['localhost']}
创建模型
fromdjango.dbimportmodelsclassContact(models.Model):first_name=models.CharField(max_length=32,null=False,blank=False)last_name=models.CharField(max_length=32,null=False,blank=False)url=models.URLField(null=False,blank=False)email=models.EmailField(max_length=254,null=False,blank=False)bio=models.TextField(null=False,blank=False)birthday=models.DateField(null=False,blank=False)
创建ModelSerializer
fromrest_frameworkimportserializersclassContactSerializer(serializers.ModelSerializer):classMeta:model=Contactfields='__all__'
创建一个search_indexes.py,它应该在应用程序的根目录中。在此处添加您的ModelSerializerDocument类。特定索引将为此文档更新其映射。在
fromdrf_elasticsearch_dsl.documentsimportModelSerializerDocumentfromelasticsearch_dslimportDate,Keyword,Text,Stringfrom.serialziersimportContactSerializerclassContactSerializerDocument(ModelSerializerDocument):first_name=String()last_name=String()url=Keyword()email=Keyword()bio=Text()birthday=Date()classMeta:index='myapp'serializer=ContactSerializerdoc_type='myapp.contact'
最后,通过运行以下命令将数据库与elasticsearch同步:
$ python manage.py update_index
特点
默认情况下,dr elasticsearch dsl不会设置信号以在保存或删除时同步模型。要启用芹菜支持,请将以下内容添加到设置.py确认:
DRF_SERIALIZER_ELASTICSERACH_SETTTINGS={...'signal_processor_class':'drf_elasticsearch_dsl.signals.CelerySignalProcessor',}
有关使用django设置芹菜的详细信息,请参阅celery文档
运行测试
代码真的有效吗?在
source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install -r requirements_test.txt (myenv) $ tox
待办事项:
- 添加要自动添加到所有ModelSerializerDocument添加到search_indexes.py
- 更好的文档
- 更好的测试覆盖率
- 项目
标签: