弹性搜索的灵活、高规模api

pyelasticsearch的Python项目详细描述


====
pyelasticsearch
=====


图片::https://travis ci.org/pyelasticsearch/pyelasticsearch.png
:alt:build status
:align:right
:target:https://travis ci.org/pyelasticsearch/pyelasticsearch

pyelasticsearch是一个干净的、经得起未来考验的、面向elasticsearch的大规模api。它提供了……


*python数据类型与json之间的透明转换,包括
datetimes和任意精度的十进制类型
*将http失败状态代码转换为异常
*连接池
*http基本身份验证和https支持
*集群中节点间的负载平衡
*失败的节点标记以避免period
*可选的失败请求自动重试
*线程安全
*松耦合设计,允许您自定义json编码和
批量索引等内容

有关我们的理念和历史的更多信息,请参阅"与ElasticSearch Py的比较,"官方客户端"<;https://py elasticsearch.readthedocs.org/en/latest/elasticsearch py/>;` ` `.



尝尝api的味道
=====


>创建一个池、平衡、全唱歌、全跳舞的连接对象::

>;从pyelasticsearch导入elasticsearch
>;>es=elasticsearch('http://localhost:9200/')

人,
…{'name':'joe tester','age':25,'title':'qa master'},
…id=1)
{u"type":u"person",u"id":u"1",u"ok":true,u"version":1,u"index":u"contacts"}

"标题":"程序员"},
…{'id':3,'name':'freddy tester,'age':29,'title':'office assistant'}]
>;>;es.bulk(es.index(doc,id=doc.pop('id'),用于文档中的文档),
…index='联系人',
…doc_type='person')


每批按一定数量的文档划分,或者对于像google app engine这样的平台,按一定数量的字节划分。由于
分离设计,如果
您有不寻常的需求,您甚至可以替换自己的批处理函数。在大多数
应用程序中,批量索引是要求最高的es任务,因此我们提供了非常全面的工具来表示操作、优化有线通信量和处理错误。请参阅
`bulk()<;https://pyelasticsearch.readthedocs.org/en/latest/api/pyelasticsearch.elasticsearch.bulk>;``了解更多信息。


10}





>
>gt>gt>gt;es.get('contacts','person','2)
{u'id'u'2',
u'u'contacts',
{u'id'u'u'id'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'u'我是说,
u'exists':true}


执行简单搜索:

>;>;es.search('name:joe or name:freddy',index='contacts')
{u'shards':{u'failed':0,u'successful':42,u'total':42},
u'hits':{u'hits':[{u'id':u'1,
u"索引":u"联系人",
u"分数":0.028130024999999999,
u"来源":{u"年龄":25,
u"名称":u"Joe Tester",
u"标题":u"质量保证主管"},
u"类型":u"人"},
{u"id":u'3',
u"index":u"contacts",
u"score":0.028130024999999,
u"source":{u"age":29,
u"name":u"freddy tester",
u"title":u'office assistant'},
u'type':u'person'},
u'max''score':0.028130024999999999,
u'total':2},
u'timed':false,
u'taked':4}

_` elasticsearch query dsl`:http://www.elastic.co/guide/en/elasticsearch/reference/current/query dsl.html

::


>gt;query={
…'查询":{
…"过滤":{
…"查询":{
…"查询字符串':{'query':'name:tester'}
…},
…过滤":{
…"范围":{
…"年龄:{
…自:27,
…致:37,
…},
…},
…},
…},
…},
…}
>;>es.search(query,index='contacts')
{u''u shard':{u'failed':0,u'successful':42,u'total':42},
u'hits':{u'hits':[{u''id':u'3',
u'index':u'contacts',
u'score':0.19178301,
u"source":{u"age":29,
u"name":u"freddy tester",
u"title":u"office assistant"},
u"type":u"person"},
u"max"得分:0.19178301,
u"total":1},
u"timed_out":false,
u"take":2}


https://pyelasticsearch.readthedocs.org/en/latest/api/>;` `.



===


v1.4.1(2018-04-02)
----
*识别新的"索引已存在"拼写,因此我们提出了右侧的异常。关闭195。
*修复ci设置。
*删除python 2.6支持。
*删除nose进行测试。

----
*通过"ca证书"arg将对自定义证书颁发机构的支持添加到
"elasticsearch"构造函数。
*通过``客户端证书'arg.

v1.3
----
*添加对https的支持。
*添加用户名、密码,并将kwargs端口到构造函数,这样,如果它们在多个服务器上相同,则不必重复它们的值。



v1.2.4(2015-05-21)
----
*在调用
时省略"查询参数"kwarg时,不会崩溃`` send_request()`.



v1.2.3(2015-04-17)
----
*使``delete_all_index()``工作。
*修复一个错误,在该错误中,将```u all``指定为索引名称有时会导致将
doctype名称视为索引名称。



v1.2.2(2015-04-10)
————
*更正"bulk()"文档中的错误。



v1.2.1(2015-04-09)
————
————
*既然Elastic已更改域并重新组织了其文档,则更新文档链接。
*需要ElasticSearch lib 1.3或更高版本,因为此时它开始公开
``connectiontimeout`.



v1.2(2015-03-06)
---------
*确保在没有显式"设置"参数的情况下调用"create_index()``
时设置内容长度头。当使用nginx作为
代理时,这就解决了411s的问题。
*将"doc"添加为"upsert()"``arg添加到"update()`"。
*使"bulk"计算出完美的最佳结果,不再超过字节限制,除非单个文档超过自身的限制。



v1.1(2015-02-12)
---------
*引入新的批量API,支持所有类型的批量操作(索引、
更新、创建和删除),通过"bulk\u chunks()"提供分块,并引入每个操作错误处理。所有错误都会引发异常,甚至个别失败的操作也会引发异常,并且异常会公开足够的数据,以便
标识要重试或报告的操作。如果您想创建自己的分块器或操作构建器,则该设计将被分离。
*不赞成使用"bulk\u index()",而应使用功能更强大的"bulk()"。
*最后更新一次"bulk\u index()"。它现在捕获单个
操作失败,引发"bulkerror"。还可以添加"索引字段"和"类型字段"参数,允许您在一个请求中跨不同的索引和文档类型进行索引。
*"elasticsearch"对象现在默认为http://localhost:9200/如果您不提供任何节点url。
*改进文档:更好地概述首页,以及如何定制json编码的文档。




v1.0(2015-01-23)
----


*切换到elasticsearch py的传输和停机池机制,
其中大部分都是从我们这里借来的。
*将批量索引(以及可能的其他网络内容)速度提高15倍。
*在文档中添加与官方客户端的比较。
*修复"delete戋by戋query()"以使用ES 1.0及更高版本。
*将"percolate()"提高到日期。
*修复在现代版本的es上失败的所有测试。
*容忍非字符串的错误并为它们正确创建异常。

…注意:

向后不兼容:

*删除与ElasticSearch<;1.0的兼容性。
*重做"cluster_state()"以使用ES 1.0及更高版本。参数已更改。
*invalidjsonresponseerror不再提供对http响应的访问
(在"response"属性中):仅提供错误数据(在"input"属性中)。
*将记录器"pyelasticsearch"更改为"elasticsearch.trace"。
*remove``复活延迟``param from elasticsearch object.
*remove``encode_body``param from``send_request()`。现在所有dict都是json编码的,所有的字符串都是单独的。


---------


*带来最新的"up date-aliases()`"API更改测试。




v0.7(2014-08-12)
----

*为"bulk-index()"指定"id-u字段"时,不要对其进行索引在
它的原始名称下;仅将其用作```u id``.
*将``aliases()``重命名为``get`aliases()``以与其他
方法保持一致。原始名称仍然有效,但已弃用。在方法中添加一个'alias``kwarg
,以便可以获取特定的别名。

…注意:

向后不兼容:

*``update_aliases()``不再需要带``actions``键的dict;
这是隐含的。只需传递该键的值即可。



v0.6.1(2013-11-01)
----


*更新包要求以允许请求2.0,这实际上是兼容的。(natim)
*正确地引发"indexalreadyexistexception",即使错误是由客户端直接连接的节点以外的节点报告的。
(jannis leidel)



----


。注意:

注意此版本中"bulk_index()"的行为变化。这种变化可能会使它更符合您的期望。但是要仔细检查,
因为它现在会在以前没有的情况下覆盖现有的文档。

之前,在某些版本的es中(比如0.90rc2),如果
文档已经存在,它就什么也没有做,可能会让您大吃一惊。(我们删除了
`'op_type':'create'``对,它的意图总是神秘的。)
(gavin carothers)
*将``force_insert``kwarg of``index()``重命名为``overwrite_existing``.
旧名称意味着它实际所做的相反。(gavin carothers)



v0.5(2013-04-20)
---------

*在"delete_by_query()"中支持多个索引和doctype。在"query"arg中同时接受
字符串和json查询,就像"search()"一样。
现在不赞成显式传递"q"arg。
*添加"multi-get"。
*添加"percolate"。谢谢,亚当·乔治奥和约瑟夫·罗斯!
*添加在"bulk_index()"中指定父文档的功能。谢谢,加文!
*从python方法中删除内部的、未记录的"from"。django haystack
用户需要升级到新版本,以避免使用它。
*重构json编码机制。现在更清楚了如何自定义它:只需将自定义json编码器类插入到"elasticsearch.json_encoder"中即可。
*不要在"python-oo"下崩溃。
*支持非ascii url路径组件(如unicode文档id)和查询字符串参数值。
*切换到nosetestrunner.


----


*修复0.4中引入的一个错误,其中当
ID未传递到"index()`"时,"none"意外发送到ES。



----

*支持Python 3。
*支持更多的api:

*``集群状态`
*``获取`设置`
*``更新``别名``和``别名`
*``更新``(以前已经存在但不起作用)

*支持``搜索``方法的``大小``参数。(如果您愿意,现在可以在代码中将
``es`size``更改为``size`。)
*支持``index``方法上的``fields``参数和``update``方法,这是
es 0.20以来的新功能。
*在传递给es时保持更好的浮点精度。
*更改批量索引的端点,以便在es<上工作;0.18.
*支持ID为0的文档。
*URL转义路径组件,因此包含有趣字符的文档ID起作用。
*为尝试创建已存在的索引时添加专用的"indexalreadyexistserror"异常。这有助于您捕获这种情况
毫不含糊。
*添加有关从pyes升级的文档。
*删除未记录和未使用的"to-python"方法。



----

*更正"requests"要求,要求版本具有我们需要的一切。实际上,需要请求1.x,它有一个稳定的api。
*添加``update()``方法。
*使``send戡u request``方法成为公共的,这样您就可以使用我们还没有显式支持的es api。
*处理十进制类和集合的json转换。
*使``more戡u this()``获取任意请求体,这样您就可以过滤返回的文档。
*用"mlt"字段替换"more-like"this"的"fields"参数。这使得它实际工作,正如es所期望的那样。
*明确我们对simplejson的未声明依赖。



v0.2(2012-10-06)
----


改善api用户体验,使pyelasticsearch
经得起未来考验。注意:

此版本在许多方面都是**向后不兼容**,请仔细阅读以下部分。如果有疑问,可以很容易地使用pyelasticsearch 0.1.


向后不兼容的更改:

*简化"search()"和"count()"调用约定。现在,每个查询都支持
第一个参数是文本查询或基于dict的查询。例如,无需将空字符串作为第一个参数传递为了使用json查询(常见情况)。


*标准化"索引"和"文档类型"名称的单数形式。一个es api是否允许多个
索引并不总是显而易见的。这就导致我不得不把目光放在文档旁边,以确定这个kwarg是称为"index"还是"index"。到处使用单数
将减少文档查找,特别是对于单个索引的常见情况


*将"more like this"重命名为"more-like this",以便与其他
方法保持一致。

*``index()``现在采用```(index,doc-type,doc)``而不是``(doc,index,
doc-type)``,以便与``bulk-index()``和其他方法保持一致。

*类似地,``put-mapping()``现在采用``(index,doc-type,mapping)```
而不是`(doc-type,mapping,index)````。

*以防止调用方意外破坏大量数据…

*``delete()``在未指定id时不再删除doctype的所有文档;改用``delete\u all()``代替。
*``delete\u index()``在未指定id时不再删除所有索引;请改用
``删除所有索引()`。
*``更新所有设置()``在未指定
时不再更新所有索引的设置;改用``更新所有设置()``即可。

*``设置日志()``已不存在。如果要配置日志记录,请使用
日志记录模块的常用功能。我们仍然会登录到名为logger的"pyelasticsearch"


*重新考虑错误处理:

*为http错误代码引发更具体的异常,以便调用方可以在不检查字符串的情况下捕获它。
*正确捕获非json响应,并引发更具体的"nonjsonresponseerror",而不是泛型的"elasticsearcherror"。
*删除在其"except"子句中可能导致崩溃的不存在异常类型。
*如果json编码失败,崩溃会更困难:这总是表示一个bug在
pyelasticsearch.
*删除定义错误的"elasticsearcherror"。
*如果无法连接到节点(并且没有自动重试),则提升"connectionerror",而不是"elasticsearcherror"。
*如果没有,则提升"valueerror",而不是"elasticsearcherror"文档
被传递到"bulk_index`"。
*所有异常现在都更为内省,因为它们不会立即将所有上下文混合成一个字符串。例如,您可以从"elastichttperror"恢复未受影响的响应对象。
*删除"quiet"kwarg,这意味着我们总是暴露错误。

其他更改:

*添加sphinx文档。
*跨多个节点添加负载平衡。
*在节点没有响应的情况下添加故障转移。
*添加"关闭索引"、"打开索引"、"更新设置",``运行状况`.
*支持将任意Kwargs传递给ES查询字符串。已知的
是逐字记录的;未预料到的需要一个"\es"前缀来保证
向前兼容。
*在编码json时自动转换"datetime"对象。
*识别并转换传递Kwargs中的datetime和dates。这对于"超时"很有用。
*在可以使用一个或多个索引的例程中,不需要调用方在列表中包装单个索引名。
*许多其他内部改进



v0.1(2012-08-30)
----


罗伯特·伊恩斯和其他作家的作品

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

推荐PyPI第三方库


热门话题
java在一个问题被连续正确回答三次/并添加差异后,我如何将程序循环回开始   Java中未实例化的匿名类   java如何在Android中录制视频,只允许横向模式和最长时间录制时间   java从另一个活动发送实时消息   多线程java线程和互斥   java禁用Spring安全日志   JAVA伊奥。StreamCorruptedException:在与子级和父级ProcessBuilder通信时写入子级中的标准输出时,流头无效   使用Java(HttpURLConnection)对Restheart进行身份验证(对于Mongodb)   java如何解决Jenkins中的SAXParseException?   java为什么我需要mockito来测试Spring应用程序?   计算sin-cos和tan时缺乏精度(java)   java Hibernate。不同项目中相同一对一映射的不同行为   java图像滑块:如何使用JavaFX将图像放在另一个图像上   java Mockito在使用when时抛出NotAMockException   http Java servlet发送回响应