围绕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第三方库


热门话题
io如何从java中的远程FileInputStream中知道扩展名为的文件名   java spring引导不会为JSP返回404,除非编译tomcat maven依赖范围?   ArchUnit:如何避免对java类的依赖冲突   java Hibernate很多都不工作   java tomcat基于表单的身份验证数据源配置错误   java将随机对象声明为私有静态最终属性可以吗?   java Sobel筛选器无法正常工作   我想用java为hangman乘以一个字符串   当我试图运行部署在Tomcat中的任何项目时,ubuntu上的java Tomcat服务器将自动关闭   java更高效地读取按字母顺序排序的文本文件   java Android Studio“尚未附加片段”   在JavaServlet中使用从一种形式到另一种形式的数据的html   检测Java中打开的文件夹(JNativeHook)   jakarta ee Hibernate映射异常:实体映射中的重复列   httpSession在Java中使用什么方法进行会话管理   java如何将两个类的代码外包到一个新的类中,以便两个类都可以调用该方法