一个flask蓝图,提供访问和搜索由源数据包创建的ElasticSearch索引的API。
项目描述
apies
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个
bedrooms
,amenities
字段包含'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/'
)
本地开发
您可以通过以下步骤启动本地开发服务器
-
安装依赖项
a. 在本地安装Docker
b. 安装Python依赖项
$ pip install dataflows dataflows-elasticsearch $ pip install -e .
-
转到
sample/
目录 -
本地启动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" }
-
将数据加载到数据库中
$ 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 } }
-
启动示例服务器
$ 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)
-
现在您可以访问服务器的端点,例如
$ 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", ... }
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。