跳转到主要内容

一个flask蓝图,提供访问和搜索由源数据包创建的ElasticSearch索引的API。

项目描述

apies

Travis Coveralls PyPI - Python Version

apies是一个flask蓝图,提供访问和搜索由源数据包创建的ElasticSearch索引的API。

端点

/get/<doc-id>

从索引中获取文档。

可用的查询参数

  • type:要获取的文档类型(如果不是docs

/search/count

/search/<doc-types>

在索引上执行搜索。

doc-types是要搜索的文档类型的逗号分隔列表。

可用的查询参数

  • q:全文搜索文本查询

  • filter:一个JSON对象,包含要应用于搜索的过滤器。这些过滤器应用于查询,但不会影响结果的评分。过滤器应该是对象数组,每个对象表示单个过滤器。所有过滤器都通过OR运算符组合。例如

    [
        {
            "first-name": "John",
            "last-name": "Watson"
        },
        {
            "first-name": "Sherlock",
            "last-name": "Holmes"
        }
    ]
    

    每个对象包含一组规则,所有规则都必须匹配。每个规则是一个键值对,其中键是字段名,值是要匹配的值。值可以是字符串或字符串数组。如果值是数组,则规则将匹配数组中任何值匹配的情况。例如

    {
        "first-name": ["Emily", "Charlotte"],
        "last-name": "Bronte"
    }
    

    字段名可以附加两个下划线和运算符,以传达除等式之外的其他关系。例如

    {
        "first-name": "Emily",
        "last-name": "Bronte",
        "age__gt": 30,
    }
    

    允许的运算符有:('gt', 'gte', 'lt', 'lte', 'eq', 'not', 'like', 'bounded', 'all')

    • gt:大于
    • gte:大于等于
    • lt:小于
    • lte:小于等于
    • eq:等于
    • not:不等于
    • like:相似(文本匹配)
    • bounded:边界(地理空间匹配到边界框)
    • all:所有(对于数组 - 数组中的所有值必须在目标中存在)

    如果同一字段需要多个运算符,字段也可以通过后缀哈希标记和数字进行标记。例如

    {
        "city": "San Francisco",
        "price__lt": 300000,
        "bedrooms__gt": 4,
        "amenities": "garage",
        "amenities#1": ["pool", "back yard"],
    }
    

    上述过滤器将匹配所有城市为“旧金山”,价格小于300000,超过4个bedroomsamenities字段包含'garage',并且至少包含“泳池”和“后院”之一的文档。

  • lookup:一个包含要应用于搜索的查找过滤器的JSON对象。这些过滤器筛选结果,同时也影响结果的评分。

  • context:要搜索的文本上下文(即在字段中运行全文本搜索查询提供的子集结果中的搜索)

  • extra:传递给库扩展的额外信息

  • size:要获取的结果数(默认:10)

  • offset:要获取的第一个结果的偏移量(默认:0)

  • order:按什么顺序结果(默认:_score)

  • highlight:要突出显示的字段的逗号分隔列表

  • snippets:要从其中获取片段的字段逗号分隔列表

  • match_type:ElasticSearch匹配类型(默认:most_fields)

  • match_operator:ElasticSearch匹配运算符(默认:and)

  • minscore:结果返回的最小分数(默认:0.0)

download/<doctypes>

以csv、xls或xlsx格式下载搜索结果。

可用的查询参数

  • types_formatted:要搜索的文档类型
  • search_term:Elasticsearch查询
  • size:要返回的命中数
  • offset:是否返回术语偏移量
  • filters:用于分页的偏移量
  • dont_highlight:
  • from_date:如果应该应用日期范围到搜索中,从什么日期开始
  • to_date:如果应该应用日期范围到搜索中,到什么日期结束
  • order:
  • file_format:要返回的文件格式,可以是'csv'、'xls'或'xlsx'。如果没有传递,文件格式将是xlsx
  • file_name:要返回的文件名,默认情况下文件名将是'search_results'
  • column_mapping:如果列应该有不同的名称,则可以在原始数据中发送列映射,例如
{
  "עיר": "address.city",
  "תקציב": "details.budget"
}

例如,获取带有列映射的csv文件

http://localhost:5000/api/download/jobs?q=engineering&size=2&file_format=csv&file_name=my_results&column_mapping={%22mispar%22:%22Job%20ID%22}

或者获取没有列映射的xlsx文件

http://localhost:5000/api/download/jobs?q=engineering&size=2&file_format=xlsx&file_name=my_results

configuration

此蓝图Flask配置

    from apies import apies_blueprint
    import elasticsearch

    app.register_blueprint(
        apies_blueprint(['path/to/datapackage.json', Package(), ...],
                        elasticsearch.Elasticsearch(...), 
                        {'doc-type-1': 'index-for-doc-type-1', ...}, 
                        'index-for-documents',
                        dont_highlight=['fields', 'not.to', 'highlight'],
                        text_field_rules=lambda schema_field: [], # list of tuples: ('exact'/'inexact'/'natural', <field-name>)
                        multi_match_type='most_fields',
                        multi_match_operator='and'),
        url_prefix='/search/'
    )

本地开发

您可以通过以下步骤启动本地开发服务器

  1. 安装依赖项

    a. 在本地安装Docker

    b. 安装Python依赖项

    $ pip install dataflows dataflows-elasticsearch
    $ pip install -e .
    
  2. 转到sample/目录

  3. 本地启动ElasticSearch

    $ ./start_elasticsearch.sh
    

    此脚本将等待并轮询服务器,直到它启动并运行。您可以通过运行以下命令来测试它

    $ curl -s http://localhost:9200
         {
         "name" : "99cd2db44924",
         "cluster_name" : "docker-cluster",
         "cluster_uuid" : "nF9fuwRyRYSzyQrcH9RCnA",
         "version" : {
             "number" : "7.4.2",
             "build_flavor" : "default",
             "build_type" : "docker",
             "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
             "build_date" : "2019-10-28T20:40:44.881551Z",
             "build_snapshot" : false,
             "lucene_version" : "8.2.0",
             "minimum_wire_compatibility_version" : "6.8.0",
             "minimum_index_compatibility_version" : "6.0.0-beta1"
         },
         "tagline" : "You Know, for Search"
         }
    
  4. 将数据加载到数据库中

    $ DATAFLOWS_ELASTICSEARCH=localhost:9200 python load_fixtures.py
    

    您可以测试数据是否已加载

    $ curl -s http://localhost:9200/jobs-job/_count?pretty
     {
         "count" : 1757,
         "_shards" : {
             "total" : 1,
             "successful" : 1,
             "skipped" : 0,
             "failed" : 0
         }
     }
    
  5. 启动示例服务器

    $ python server.py 
     * Serving Flask app "server" (lazy loading)
     * Environment: production
     WARNING: Do not use the development server in a production environment.
     Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    
  6. 现在您可以访问服务器的端点,例如

         $ curl -s 'localhost:5000/api/search/jobs?q=engineering&size=2' | jq
         127.0.0.1 - - [26/Jun/2019 10:45:31] "GET /api/search/jobs?q=engineering&size=2 HTTP/1.1" 200 -
         {
             "search_counts": {
                 "_current": {
                 "total_overall": 617
                 }
             },
             "search_results": [
                 {
                 "score": 18.812,
                 "source": {
                     "# Of Positions": "5",
                     "Additional Information": "TO BE APPOINTED TO ANY CIVIL <em>ENGINEERING</em> POSITION IN BRIDGES, CANDIDATES MUST POSSESS ONE YEAR OF CIVIL <em>ENGINEERING</em> EXPERIENCE IN BRIDGE DESIGN, BRIDGE CONSTRUCTION, BRIDGE MAINTENANCE OR BRIDGE INSPECTION.",
                     "Agency": "DEPARTMENT OF TRANSPORTATION",
                     "Business Title": "Civil Engineer 2",
                     "Civil Service Title": "CIVIL ENGINEER",
                     "Division/Work Unit": "<em>Engineering</em> Review & Support",
             ...
         }
    

项目详情


版本历史 发布通知 | RSS源

下载文件

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

源代码分发

apies-1.11.0.tar.gz (19.9 kB 查看散列)

上传时间 源代码

构建分发

apies-1.11.0-py2.py3-none-any.whl (16.8 kB 查看散列)

上传时间 Python 2 Python 3

支持者: