基于elasticsearch-dsl构建的Elasticsearch Python客户端
项目描述
fiqs
fiqs是一个具有偏见的、高级库,其目标是帮助您再次编写简洁的查询并更好地消费Elasticsearch的结果。它基于出色的Elasticsearch DSL库构建。
fiqs公开了一个flatten_result
函数,该函数将elasticsearch-dsl的Result
或字典转换为节点列表。fiqs还允许您创建类似Django的Model类,这会自动生成Elasticsearch映射。最后,fiqs公开了一个FQuery
对象,利用您的模型,让您可以对Elasticsearch编写更简洁的查询。
兼容性
fiqs与Elasticsearch 6.X兼容,并支持Python3
文档
文档可在https://fiqs.readthedocs.io/找到
代码示例
您定义一个模型,与您的Elasticsearch集群中的内容相匹配
from fiqs import models
class Sale(models.Model):
index = 'sale_data'
doc_type = 'sale'
id = fields.IntegerField()
shop_id = fields.IntegerField()
client_id = fields.KeywordField()
timestamp = fields.DateField()
price = fields.IntegerField()
payment_type = fields.KeywordField(choices=['wire_transfer', 'cash', 'store_credit'])
然后您可以编写干净的查询
from elasticsearch_dsl import Search
from fiqs.aggregations import Sum
from fiqs.query import FQuery
from .models import Sale
search = Search(...)
metric = FQuery(search).values(
total_sales=Sum(Sale.price),
).group_by(
Sale.shop_id,
Sale.client_id,
)
result = metric.eval()
并让fiqs组织结果
print(result)
# [
# {
# "shop_id": 1,
# "client_id": 1,
# "doc_count": 30,
# "total_sales": 12345.0,
# },
# {
# "shop_id": 2,
# "client_id": 1,
# "doc_count": 20,
# "total_sales": 23456.0,
# },
# {
# "shop_id": 3,
# "client_id": 1,
# "doc_count": 10,
# "total_sales": 34567.0,
# },
# [...]
# ]
贡献
fiqs项目托管在Github
要在您的机器上运行测试,请使用此命令:python setup.py test
一些测试用于从Elasticsearch生成结果输出。要运行它们,您需要在您的机器上运行一个Docker容器:docker run -d -p 8200:9200 -p 8300:9300 elasticsearch:6.x.x
然后运行 pytest -k docker
。
许可协议
请参阅附件中的LICENSE文件。