有弹性的搜索,有表现力的搜索
sqlorm4es的Python项目详细描述
sqlorm4es
用于elasticsearch的一个简单而有表现力的类似sql的orm。在
示例
- 以Django方式定义索引模型:
fromsqlorm4esimport*classLogCenter(BaseModel):__index__='lala'__database__={"host":"127.0.0.1:9200"}ok=Boolean(default=True)lineno=Integer(required=True)message=Text(default='xixi')timestamp=Date(name="@timestamp",timezone="+8")bigbrother=Object(head=Text(),hand=Object(finger=Float(),nail=Boolean()))
- 以表达方式搜索弹性搜索:
- 请注意,可以嵌套where中的and(amp;)/或(|)表达式
- 还支持按聚合分组:MAX,MIN,AVG,SUM,COUNT。。。在
- 还支持订单依据、限制、偏移量:
res=LogCenter.select('max(lineno)')\ .group_by(LogCenter.ok,LogCenter.timestamp)\ .order_by((LogCenter.timestamp,'asc'))\ .execute()
- 像普通python对象一样操作文档,赋值时将验证值(例如,日期字段中的值全部存储为UTC):
new_log=LogCenter(ok=False,message='oops',timestamp='2019-10-10')new_log.bigbrother={"head":'tough',"hand":{"finger":"long","nail":"clean"}}
- 创建单个文档:
new_log.save()
- Insert、Delete、Update和Index操作:即将推出。。。在
安装
Sqlorm4es已经打包到pypi中,所以只需要一个简单的命令就可以安装它:
pip install sqlorm4es
Elasticsearch驱动程序
Sqlorm4es基于官方的Elasticsearch客户端实现了一个简单的几乎无锁的连接池。因为它是无锁的,所以我不确定它是否是线程安全的,但它在我自己的多线程测试中运行良好:)
- 请注意,如果您没有设置模型的配置,它将使用以下默认配置:
config={'hosts':['127.0.0.1:9200'],'maxsize':20,'sniff_on_start':False,'sniff_on_connection_fail':False,'sniff_timeout':.1,'sniffer_timeout':None,'retry_on_timeout':False,'timeout':60,}
- 项目
标签: