git支持的json对象存储&弹性搜索

elastic-git的Python项目详细描述


在git支持的声明性object-y中冒险并使用 作为查询后端的ElasticSearch。

注意

这里有巨龙。

Continuous IntegrationCode CoverageElastic-Git Documentation

用法

fromelasticgitimportEGfromelasticgit.modelsimportModel,IntegerField,TextFieldworkspace=EG.workspace('/Users/sdehaan/Desktop/test-repo/')workspace.setup('Simon de Haan','simon@praekeltfoundation.org')"""
# The model looks like this

class Person(Model):
    age = IntegerField('The Age')
    name = TextField('The Name')
"""fromelasticgit.tests.baseimportTestPersonasPersonperson1=Person({'age':10,'name':'Foo'})workspace.save(person1,'Saving Person 1')person2=Person({'age':20,'name':'Bar'})workspace.save(person2,'Saving Person 2')person3=Person({'age':30,'name':'Baz'})workspace.save(person3,'Saving Person 3')

数据现在保存在git存储库中,并且可以通过elasticsearch进行查询:

>>>fromelasticgitimportEG>>>fromelasticgit.tests.baseimportTestPersonasPerson>>>workspace=EG.workspace('/Users/sdehaan/Desktop/test-repo/')>>>forpersoninworkspace.S(Person).filter(age__gte=20):...printperson.name,person.age...Bar20Baz30

检查examples/目录以获取更多代码示例。

$ python -m examples.basic_usage
e6cb25f00870472fa5223d76dc361667 Baz 30
2bd470372243411c9abd8fdcb969dcf5 Bar 20

模式管理

在模式演化方面,我们遵循了apacheAvro的例子。 可以从命令行生成与avro兼容的模式。

模型定义可以从Avrojson模式文件重建。

示例模型文件:

classTestFallbackPerson(Model):age=IntegerField('The Age')name=TextField('The name',fallbacks=[SingleFieldFallback('nick'),SingleFieldFallback('obsolete'),])nick=TextField('The nickname',required=False)obsolete=TextField('Some obsolete field',required=False)

生成Avro规范文件

$ python -m elasticgit.tools dump-schema \
>   elasticgit.tests.base.TestFallbackPerson > avro.json
$ python -m elasticgit.tools load-schema avro.json > models.py

生成的模型文件:

# NOTE:##   This is an automatically generated Elasticgit Model definition#   from an Avro schema. Do not manually edit this file unless you#   absolutely know what you are doing.## timestamp: 2014-10-14T18:51:23.916194# namespace: elasticgit.tests.base# type: record# name: TestFallbackPerson#fromelasticgitimportmodelsclassTestFallbackPerson(models.Model):name=models.TextField(u"""The name""",fallbacks=[models.SingleFieldFallback('nick'),models.SingleFieldFallback('obsolete'),])age=models.IntegerField(u"""The Age""")obsolete=models.TextField(u"""Some obsolete field""")_version=models.ModelVersionField(u"""Model Version Identifier""")nick=models.TextField(u"""The nickname""")uuid=models.TextField(u"""Unique Identifier""")

我们正在使用ConfModel的回退功能并将其编码为Avro 架构为aliases。这让你可以回到以前的名字 字段:

>>>TestFallbackPerson({'obsolete':'oldest name','age':10}).name'oldest name'>>>TestFallbackPerson({'nick':'older name','age':10}).name'older name'>>>TestFallbackPerson({'name':'current name','age':10}).name'current name'

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

推荐PyPI第三方库


热门话题
java如何让用户决定按钮的特定颜色   java Tomcat jdbc连接池,使用后不释放连接   Java泛型类可分配性   javaactivemq&如何在路由路径中创建依赖关系   java为什么没有接收到操作用户?   windows如何启动使用cmd中预编译DLL的java swing应用程序?   java JFreechart实时组合图,在未收到数据点的情况下呈现step子图表的上一个值   java排序自定义数组列表   java如何从HSLFSlideShow获取文本格式信息   java不能将片段和活动登录结合起来   java是下载位于远程存储服务中的文件的有效方法   java AS:将点数交给GameOverActivity   java如何在textView中将焦点放在新生成文本的顶部?   HashMap中特定于Java存储的类类型   java使用不同的变量类型进行计算   if语句中的Java poll()   检查匹配括号的java字符堆栈没有错误,但也没有任何作用   java Netbeans不断将应用程序部署到错误的服务器