基于json表模式描述符生成es索引、加载和提取数据。

tableschema-elasticsearch的Python项目详细描述


表模式弹性搜索py

TravisCoverallsPyPiGitter

基于Table Schema描述符生成并加载ElasticSearch索引。

功能

  • 实现tableschema.Storage接口

内容

开始

安装

包使用语义版本控制。这意味着主要版本可能包括破坏性更改。强烈建议在setup/requirements文件中指定package版本范围,例如package>=1.0,<2.0

pip install tableschema-elasticsearch

示例

本自述中的代码示例需要Python3.3+解释器。您可以在examples目录中看到更多示例。

importelasticsearchimportjsontableschema_esINDEX_NAME='testing_index'# Connect to Elasticsearch instance running on localhostes=elasticsearch.Elasticsearch()storage=jsontableschema_es.Storage(es)# List all indexesprint(list(storage.buckets))# Create a new indexstorage.create('test',[('numbers',{'fields':[{'name':'num','type':'number'}]})])# Write data to indexl=list(storage.write(INDEX_NAME,'numbers',({'num':i}foriinrange(1000)),['num']))print(len(l))print(l[:10],'...')l=list(storage.write(INDEX_NAME,'numbers',({'num':i}foriinrange(500,1500)),['num']))print(len(l))print(l[:10],'...')# Read all data from indexstorage=jsontableschema_es.Storage(es)print(list(storage.buckets))l=list(storage.read(INDEX_NAME))print(len(l))print(l[:10])

文档

这里描述了这个包的整个公共api,并遵循语义版本控制规则。本自述文件之外的所有内容都是私有api,可以在不通知任何新版本的情况下进行更改。

储存

包实现Tabular Storage接口(请参阅链接上的完整文档):

Storage

此驱动程序提供了一个附加的api:

Storage(es=None)

  • es (object)-elasticsearch.Elastisearc实例。如果不提供,将创建新的。

在这个驱动程序中,elasticsearch被用作db包装器。我们可以通过这种方式获得存储空间:

fromelasticsearchimportElasticsearchfromjsontableschema_sqlimportStorageengine=Elasticsearch()storage=Storage(engine)

然后我们可以与存储交互(“bucket”在此上下文中是elasticsearch索引):

storage.buckets# iterator over bucket namesstorage.create('bucket',[(doc_type,descriptor)],reindex=False,always_recreate=False,mapping_generator_cls=None)# reindex will copy existing documents from an existing index with the same name (in case of a mapping conflict)# always_recreate will always recreate an index, even if it already exists. default is to update mappings only.# mapping_generator_cls allows customization of the generated mappingstorage.delete('bucket')storage.describe('bucket')# return descriptor, not implemented yetstorage.iter('bucket',doc_type=optional)# yield rowsstorage.read('bucket',doc_type=optional)# return rowsstorage.write('bucket',doc_type,rows,primary_key,as_generator=False)# primary_key is a list of field names which will be used to generate document ids

创建索引时,我们总是创建一个具有半随机名称和指向该名称的匹配别名的索引。这使得我们可以在重新创建索引时决定是否重新索引文档,或者丢弃现有记录。

映射

创建索引时,表模式类型将转换为ES类型,并为索引生成映射。

模式中的一些特殊属性为生成映射提供了额外信息:

  • array类型还需要具有指定数组项的内部数据类型的es:itemType属性。
  • {{CD11}}类型还需要具有^ {CD12}}属性,该属性为该对象中包含的内部文档提供表(或^ {CD13}}以禁用该字段的索引)。

示例:

{"fields":[{"name":"my-number","type":"number"},{"name":"my-array-of-dates","type":"array","es:itemType":"date"},{"name":"my-person-object","type":"object","es:schema":{"fields":[{"name":"name","type":"string"},{"name":"surname","type":"string"},{"name":"age","type":"integer"},{"name":"date-of-birth","type":"date","format":"%Y-%m-%d"}]}},{"name":"my-library","type":"array","es:itemType":"object","es:schema":{"fields":[{"name":"title","type":"string"},{"name":"isbn","type":"string"},{"name":"num-of-pages","type":"integer"}]}},{"name":"my-user-provded-object","type":"object","es:enabled":false}]}

自定义映射

通过提供自定义映射生成器类(通过mapping_generator_cls),继承mapping generator类,您应该能够

贡献

该项目遵循Open Knowledge International coding standards

建议的入门方法是创建和激活项目虚拟环境。 要将包和开发依赖项安装到活动环境中,请执行以下操作:

$ make install

要使用绒布和覆盖率运行测试:

$ make test

对于绒线,使用pylama.ini中配置的pylama。在这个舞台上 安装到您的环境中,可以与更细粒度的控件分开使用 如文档-https://pylama.readthedocs.io/en/latest/中所述。

例如,按错误类型对结果排序:

$ pylama --sort <path>

使用tox.ini中配置的tox进行测试。 它已经安装到您的环境中,可以与文档-https://testrun.org/tox/latest/中描述的更细粒度的控件分开使用。

例如,根据python 2环境检查测试子集,增加了详细程度。 --之后的所有位置参数和选项都将传递给py.test

tox -e py27 -- -v tests/<path>

在引擎盖下tox使用pytest中配置的pytest.inicoverage 以及mock包。此软件包仅在毒物环境中可用。

更改日志

这里只描述了打破和最重要的变化。所有发布版本的完整变更日志和文档可以在格式良好的commit history中找到。

v0.x

初始驱动程序实现。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ByteArrayOutputStream的java解码属性   java S3 SDK在上载时更新单个对象,而不是创建新文件   java hibernate:无法从eclipse连接到DB   java如何在强制转换JComboBox之前检查其类型?   http从Java中的GETPOST请求方法捕获URI、资源名称,如开发人员工具中所示   java在Spring@Bean方法中返回接口的局限性   Java中的Web服务和客户端(使用Eclipse Apache Axis 2自底向上服务)某些代码会引发异常   java spring安全+rest不起作用   java将LinkedList添加到包含LinkedList的LinkedList并更改添加的LinkedList   java是否临时删除对象的属性?   java使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的   java如何高效地处理maven3时间戳快照?   java向集合对象添加另一项   java如何将动态参数传递给jquery函数   java使用libGdx桌面端口作为Android GLES20的仿真器