围绕ElasticsearchDSL的DRF包装

drf-elasticsearch-dsl的Python项目详细描述


https://badge.fury.io/py/drf-elasticsearch-dsl.svghttps://circleci.com/gh/ajbeach2/drf-elasticsearch-dsl.svg?style=svghttps://codecov.io/gh/ajbeach2/drf-elasticsearch-dsl/branch/master/graph/badge.svg

DRF Elasticsearch DSL是基于django-haystack的,它提供了一个ModelSerializerDocument 它支持elastic-search-dsl persistence提供的所有字段类型。。ModelSerializerDocument基于elasticsearch-dsl.py提供的DocType

这个库的目的是允许使用DRF的ModelSerializer类定义elasticsearch文档,同时还可以选择使用celery支持异步文档更新和删除。在

文件

完整的文档位于https://drf-elasticsearch-dsl.readthedocs.io。在

快速启动

安装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
  • 更好的文档
  • 更好的测试覆盖率

学分

用于呈现此包的工具:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:在迭代器类型(接口/实现类)之间转换?   java“Click Method”不断返回“Stale Element Exceoption”?   Android应用程序/进程的java生命周期?   java在发布消息时收到“无法识别的Windowssocket错误:0:recv失败”   java如何返回第二个值   java将基本授权头添加到一些请求中   使用改型安卓的java Post请求错误   PropertyPlaceHolderConfigure位置内的java Spring占位符   java是导入com的工具。谷歌。安卓gms。gcm无法解决,Google Play服务已经安装   java如何获取JSON数据的多个可选值?   java如何使用ApachePOI从word中的形状读取文本   安卓 java。Eclipse中的lang.NoClassDefFoundError,但不适用于Ant   如何在Java中用stream()将Map<v1,Set<v2>>转换为Map<v2,Set<v1>>   循环在java中循环时,如何从数组列表中删除某些内容?