加载中

客户端助手

您可以在这里找到一系列简单的辅助函数,它们抽象了原始 API 的一些具体细节。

批量 API 有几个辅助函数,因为其对特定格式和其他考虑因素的要求,如果直接使用可能会很麻烦。

所有批量助手都接受一个 Elasticsearch 类的实例和一个可迭代的 action(任何可迭代对象,也可以是生成器,这在大多数情况下是理想的,因为它允许您索引大型数据集而无需将其加载到内存中)。对于异步 Python,请使用带有 async_ 前缀的批量助手,并将一个 AsyncElasticsearch 实例作为第一个参数传入。

可迭代对象 action 中的项应该是我们希望以多种格式索引的文档。最常见的一种与 search() 返回的格式相同,例如

{
  '_index': 'index-name',
  '_id': 42,
  '_routing': 5,
  'pipeline': 'my-ingest-pipeline',
  '_source': {
    "title": "Hello World!",
    "body": "..."
  }
}
		

或者,如果 _source 不存在,它会从文档中弹出所有元数据字段,并将其余部分用作文档数据

{
  "_id": 42,
  "_routing": 5,
  "title": "Hello World!",
  "body": "..."
}
		

bulk() API 接受 indexcreatedeleteupdate 操作。使用 _op_type 字段指定操作(_op_type 默认为 index)。

{
  '_op_type': 'delete',
  '_index': 'index-name',
  '_id': 42,
}
{
  '_op_type': 'update',
  '_index': 'index-name',
  '_id': 42,
  'doc': {'question': 'The life, universe and everything.'}
}
		

scroll() API 之上的简单抽象——一个简单的迭代器,它按底层滚动请求返回的所有匹配项。

默认情况下,扫描不按任何预定顺序返回结果。要在滚动时让返回的文档具有标准顺序(无论是按分数还是显式排序定义),请使用 preserve_order=True。这可能是一个昂贵的操作,并且会抵消使用 scan 的性能优势。

from elasticsearch.helpers import scan

es = Elasticsearch(hosts=['https://:9200'])

scan(
    es,
    query={"query": {"match": {"title": "python"}}},
    index="orders-*"
)
		
from elasticsearch.helpers import async_scan

es = AsyncElasticsearch(hosts=['https://:9200'])

async def main():
    await async_scan(
        es,
        query={"query": {"match": {"title": "python"}}},
        index="orders-*"

asyncio.run(main())
		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.