跳转到主要内容

基于elasticsearch-dsl构建的Elasticsearch Python客户端

项目描述

fiqs

Build Status

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文件。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

fiqs-0.4.0.tar.gz (32.4 kB 查看哈希值)

上传时间

支持