Skip to main content

REST API

API 版本

所有 API 终端都以 api/v1/ 前缀开始。v1 表示我们当前正在使用 API 的第 1 版。

OpenAPI 规范

REST API 的 OpenAPI 规范可在 /openapi.json 访问,Swagger UI 版本可在 /ui/api-playground 访问。

参数

URL 中传递的参数必须正确进行 URL 编码,对于非 ASCII 字符使用 UTF-8 编码。

GET [..]/search?query=barack%20obama

错误处理

成功的请求返回 2xx HTTP 状态码。

失败的请求返回 4xx HTTP 状态码。失败请求的响应体包含一个 JSON 对象,其中有一个描述错误的 message 字段。

{
"message": "Failed to parse query"
}

搜索 API

在索引中搜索

在给定索引 api/v1/<index id>/search 中搜索与查询匹配的文档。只要集群中至少有一个运行搜索服务的节点,此终端就可用。 搜索终端接受 GETPOST 请求。参数 对于 GET 请求是 URL 参数,而对于 POST 请求是 JSON 键值对。

GET api/v1/<index id>/search?query=searchterm
POST api/v1/<index id>/search
{
"query": searchterm
}

Path 变量

变量描述
index id索引 ID

参数

变量类型描述默认值
queryString查询文本。详见 查询语言文档必需
start_timestampi64如果设置,则限制搜索 timestamp >= start_timestamp 的文档,利用潜在的时间剪枝机会。值必须以秒为单位。
end_timestampi64如果设置,则限制搜索 timestamp < end_timestamp 的文档,利用潜在的时间剪枝机会。值必须以秒为单位。
start_offsetInteger要跳过的文档数量0
max_hitsInteger要返回的最大命中数(默认为 20)20
search_field[String]如果查询中未指定字段名称,则在此字段中进行搜索。逗号分隔列表,例如 "field1,field2"index_config.search_settings.default_search_fields
snippet_fields[String]提取片段的字段。逗号分隔列表,例如 "field1,field2"
sort_by[String]排序查询结果的字段。您可以根据一个或两个快速字段或 BM25 _score(需要 fieldnorms)进行排序。默认情况下,命中结果按文档 ID 排序。
formatEnum输出格式。允许的值为 "json" 或 "pretty_json"pretty_json
aggsJSON聚合请求。有关支持的聚合,请参阅 聚合文档
info

start_timestampend_timestamp 应以秒为单位指定,无论时间戳字段的精度如何。

Response

响应是一个 JSON 对象,内容类型为 application/json; charset=UTF-8

字段描述类型
hits查询结果[hit]
num_hits匹配总数number
elapsed_time_micros查询处理时间number

搜索多个索引

接受 index id 请求路径参数的搜索 API 也支持多目标语法。

多目标语法

在多目标语法中,您可以使用逗号或其 URL 编码版本 '%2C' 分隔的列表来在多个索引上运行请求:test1,test2,test3。您也可以使用 glob-like 通配符 (*) 表达式来针对符合模式的索引:test* 或 test 或 tet 或 test

以下是关于多目标表达式的几个约束条件。

  • 必须遵循正则表达式 ^[a-zA-Z\*][a-zA-Z0-9-_\.\*]{0,254}$
  • 不能包含连续的星号 (*)。
  • 如果包含星号 (*),长度必须大于等于 3 个字符。

示例

GET api/v1/stackoverflow-000001,stackoverflow-000002/search
{
"query": "search AND engine",
}
GET api/v1/stackoverflow*/search
{
"query": "search AND engine",
}

在索引中搜索流

GET api/v1/<index id>/search/stream?query=searchterm&fast_field=my_id

从目标索引 <index id> 中所有匹配搜索查询的文档中流式传输字段值,并以以下指定的输出格式之一输出:

  • CSV
  • ClickHouse RowBinary。如果设置了 partition_by_field,Quickwit 会为每个分区字段值返回数据块。每个数据块以 16 字节的分区值和内容长度开始,然后是以 RowBinary 格式的 fast_field 值。

fast_fieldpartition_by_field 必须是类型为 i64u64 的快速字段。

只要集群中至少有一个运行搜索服务的节点,此终端就可用。

note

如果 1000 万份文档匹配查询,此终端将返回 1000 万个值。这是预期的,此终端旨在支持匹配数百万份文档的查询,并在合理的响应时间内返回字段值。

Path 变量

变量描述
index id索引 ID

GET 参数

变量类型描述默认值
queryString查询文本。详见 查询语言文档必需
fast_fieldString从文档中检索的字段名称。此字段必须是类型为 i64u64 的快速字段。必需
search_field[String]要搜索的字段。逗号分隔列表,例如 "field1,field2"index_config.search_settings.default_search_fields
start_timestampi64如果设置,则限制搜索 timestamp >= start_timestamp 的文档。值必须以秒为单位。
end_timestampi64如果设置,则限制搜索 timestamp < end_timestamp 的文档。值必须以秒为单位。
partition_by_fieldString如果设置,则终端返回每个分区字段值的数据块。此字段必须是类型为 i64u64 的快速字段。
output_formatString响应输出格式。csvclickHouseRowBinarycsv
info

start_timestampend_timestamp 应以秒为单位指定,无论时间戳字段的精度如何。

Response

响应是一个 HTTP 流。根据客户端的能力,它可能是 HTTP1.1 分块传输编码流 或 HTTP2 流。

它返回所有匹配查询的文档中的字段值列表。字段必须在索引配置中标记为“快速”才能生效。 格式基于指定的输出格式。

如果出现错误,将通过尾部通道发送包含错误信息的 "X-Stream-Error" 标头,并通过 sender.abort() 关闭流。 根据客户端的不同,带有错误详情的尾部标头可能不会显示。错误也会在 quickwit 中记录(“流式传输搜索结果时出错”)。

向索引中导入数据

POST api/v1/<index id>/ingest -d \
'{"url":"https://en.wikipedia.org/wiki?id=1","title":"foo","body":"foo"}
{"url":"https://en.wikipedia.org/wiki?id=2","title":"bar","body":"bar"}
{"url":"https://en.wikipedia.org/wiki?id=3","title":"baz","body":"baz"}'

向给定的 <index id> 导入一批文档,使其可被搜索。目前,NDJSON 是唯一接受的有效载荷格式。此终端仅在运行索引服务的节点上可用。

控制索引文档何时可用于搜索

新添加的文档直到被添加到一个切片并提交该切片后才会出现在搜索结果中。这个过程是自动的,并由 split_num_docs_targetcommit_timeout_secs 参数控制。默认情况下,导入命令会在记录被添加到索引队列后立即退出,这意味着此时新文档不会出现在搜索结果中。可以通过在查询中添加 commit=wait_forcommit=force 参数来改变这种行为。wait_for 参数会使命令等待文档根据标准时间和文档数量规则被提交。force 参数会在处理完请求中的所有文档后触发一次提交,并且在返回前等待此次提交完成。请注意,force 选项可能会导致显著的性能开销,特别是在用于小批量文档时。

POST api/v1/<index id>/ingest?commit=wait_for -d \
'{"url":"https://en.wikipedia.org/wiki?id=1","title":"foo","body":"foo"}
{"url":"https://en.wikipedia.org/wiki?id=2","title":"bar","body":"bar"}
{"url":"https://en.wikipedia.org/wiki?id=3","title":"baz","body":"baz"}'
info

有效载荷大小限制为 10MB,因为此终端旨在批量接收文档。

Path 变量

变量描述
index id索引 ID

Query 参数

变量类型描述默认值
commitString提交行为:autowait_forforceauto

Response

响应是一个 JSON 对象,内容类型为 application/json; charset=UTF-8

字段描述类型
num_docs_for_processing将要处理的文档总数。这些文档可能尚未被处理。API 不会返回索引错误,请检查服务器日志以获取错误信息。number

索引 API

创建索引

POST api/v1/indexes

通过发布 IndexConfig 负载来创建索引。API 接受带有 content-type: application/json 的 JSON 和带有 content-type: application/yaml 的 YAML。

POST 负载

变量类型描述默认值
versionString配置格式版本,使用与您的 Quickwit 版本相同的版本。必需
index_idString索引 ID,参见标识符的 验证规则必需
index_uriString定义索引文件存储的位置。此参数期望一个 存储 URI{default_index_root_uri}/{index_id}
doc_mappingDocMapping文档映射对象,具体定义参见 索引配置文档必需
indexing_settingsIndexingSettings索引设置对象,具体定义参见 索引配置文档
search_settingsSearchSettings搜索设置对象,具体定义参见 索引配置文档
retentionRetention保留策略对象,具体定义参见 索引配置文档

Payload Example

curl -XPOST http://localhost:7280/api/v1/indexes --data @index_config.json -H "Content-Type: application/json"

{
"version": "0.8",
"index_id": "hdfs-logs",
"doc_mapping": {
"field_mappings": [
{
"name": "tenant_id",
"type": "u64",
"fast": true
},
{
"name": "app_id",
"type": "u64",
"fast": true
},
{
"name": "timestamp",
"type": "datetime",
"input_formats": ["unix_timestamp"],
"fast_precision": "seconds",
"fast": true
},
{
"name": "body",
"type": "text",
"record": "position"
}
],
"partition_key": "tenant_id",
"max_num_partitions": 200,
"tag_fields": ["tenant_id"],
"timestamp_field": "timestamp"
},
"search_settings": {
"default_search_fields": ["body"]
},
"indexing_settings": {
"merge_policy": {
"type": "limit_merge",
"max_merge_ops": 3,
"merge_factor": 10,
"max_merge_factor": 12
}
},
"retention": {
"period": "7 days",
"schedule": "@daily"
}
}

Response

响应是创建的索引的元数据,内容类型为 application/json; charset=UTF-8

字段描述类型
version当前索引配置格式版本。string
index_uid服务器生成的索引 UID。string
index_config发布的索引配置。IndexConfig
checkpoint按来源划分的检查点映射。IndexCheckpoint
create_timestamp索引创建时间戳number
sources索引来源配置列表。Array<SourceConfig>

更新索引

PUT api/v1/indexes/<index id>

更新索引的配置。此终端遵循 PUT 语义,这意味着当前配置的所有字段将被此请求中指定的值或相关默认值替换。特别是,如果字段是可选的(例如 retention_policy),省略它将会删除相关的配置。如果新的配置文件包含无法应用的更新,则请求失败,且不应用任何更新。API 接受带有 content-type: application/json 的 JSON 和带有 content-type: application/yaml 的 YAML。

  • 保留策略更新会在下次状态刷新时被 janitor 服务自动检测。
  • 搜索设置更新会在执行下一个查询时被搜索节点自动检测。
  • 索引设置更新不会被索引节点自动检测,需要手动重启索引节点。
  • 文档映射更新不会被索引节点自动检测,需要手动重启索引节点。

更新文档映射不会重新索引现有数据。在查询旧切片时,查询和答案会尽力进行映射。 此外,无法更新时间戳字段,也无法修改或移除现有的非默认分词器(但可以更改字段使用的分词器)。

PUT 负载

变量类型描述默认值
versionString配置格式版本,使用与您的 Quickwit 版本相同的版本。必需
index_idString索引 ID,必须与请求 URI 中的索引相同。必需
index_uriString定义索引文件存储的位置。无法更新。{current_index_uri}
doc_mappingDocMapping文档映射对象,具体定义参见 索引配置文档必需
indexing_settingsIndexingSettings索引设置对象,具体定义参见 索引配置文档
search_settingsSearchSettings搜索设置对象,具体定义参见 索引配置文档
retentionRetention保留策略对象,具体定义参见 索引配置文档

Payload Example

curl -XPUT http://localhost:7280/api/v1/indexes/hdfs-logs --data @updated_index_update.json -H "Content-Type: application/json"

{
"version": "0.8",
"index_id": "hdfs-logs",
"doc_mapping": {
"field_mappings": [
{
"name": "tenant_id",
"type": "u64",
"fast": true
},
{
"name": "app_id",
"type": "u64",
"fast": true
},
{
"name": "timestamp",
"type": "datetime",
"input_formats": ["unix_timestamp"],
"fast_precision": "seconds",
"fast": true
},
{
"name": "body",
"type": "text",
"record": "position"
}
],
"partition_key": "tenant_id",
"max_num_partitions": 200,
"tag_fields": ["tenant_id"],
"timestamp_field": "timestamp"
},
"search_settings": {
"default_search_fields": ["body"]
},
"indexing_settings": {
"merge_policy": {
"type": "limit_merge",
"max_merge_ops": 3,
"merge_factor": 10,
"max_merge_factor": 12
}
},
"retention": {
"period": "30 days",
"schedule": "@daily"
}
}

Response

响应是更新后的索引的元数据,内容类型为 application/json; charset=UTF-8

字段描述类型
version当前服务器配置版本。string
index_uid服务器生成的索引 UID。string
index_config发布的索引配置。IndexConfig
checkpoint按来源划分的检查点映射。IndexCheckpoint
create_timestamp索引创建时间戳number
sources索引来源配置列表。Array<SourceConfig>

获取索引元数据

GET api/v1/indexes/<index id>

获取 ID 为 index id 的索引元数据。

Response

响应是请求的索引元数据,内容类型为 application/json; charset=UTF-8

字段描述类型
version当前服务器配置版本。string
index_uid服务器生成的索引 UID。string
index_config发布的索引配置。IndexConfig
checkpoint按来源划分的检查点映射。IndexCheckpoint
create_timestamp索引创建时间戳number
sources索引来源配置列表。Array<SourceConfig>

描述索引

GET api/v1/indexes/<index id>/describe

描述 ID 为 index id 的索引。

Response

响应是请求的索引统计信息,内容类型为 application/json; charset=UTF-8

字段描述类型
index_id索引的索引 IDString
index_uri索引的 URIString
num_published_splits已发布的切片数量number
size_published_splits已发布的切片大小number
num_published_docs已发布的文档数量number
size_published_docs_uncompressed已发布文档的大小(未压缩,以字节为单位)number
timestamp_field_name时间戳字段名称String
min_timestamp时间戳的起始时间number
max_timestamp时间戳的结束时间number

获取切片

GET api/v1/indexes/<index id>/splits

获取 ID 为 index id 的索引的切片。

Path 变量

变量描述
index id索引 ID

查询参数

变量类型描述
offsetnumber如果设置,限制跳过的切片数量。
limitnumber如果设置,限制检索的最大切片数量。
split_statesusize如果设置,过滤特定的切片状态。
start_timestampnumber如果设置,限制具有 timestamp >= start_timestamp 的文档的切片。
end_timestampnumber如果设置,限制具有 timestamp < end_timestamp 的文档的切片。
end_create_timestampnumber如果设置,限制创建日期在此日期之前的切片。

Response

响应是请求的索引统计信息,内容类型为 application/json; charset=UTF-8

字段描述类型
offset偏移量number
size返回的切片数量number
splits切片列表List

示例

GET /api/v1/indexes/stackoverflow/splits?offset=0&limit=10
{
"offset": 0,
"size": 1,
"splits": [
{
"split_state": "Published",
"update_timestamp": 1695642901,
"publish_timestamp": 1695642901,
"version": "0.7",
"split_id": "01HB632HD8W6WHNM7CZFH3KG1X",
"index_uid": "stackoverflow:01HB6321TDT3SP58D4EZP14KSX",
"partition_id": 0,
"source_id": "_ingest-api-source",
"node_id": "jerry",
"num_docs": 10000,
"uncompressed_docs_size_in_bytes": 6674940,
"time_range": {
"start": 1217540572,
"end": 1219335682
},
"create_timestamp": 1695642900,
"maturity": {
"type": "immature",
"maturation_period_millis": 172800000
},
"tags": [],
"footer_offsets": {
"start": 4714989,
"end": 4719999
},
"delete_opstamp": 0,
"num_merge_ops": 0
}
]
}

清空索引

PUT api/v1/indexes/<index id>/clear

清空 ID 为 index id 的索引:所有切片将被删除(元存储 + 存储),并且所有来源检查点将被重置。

返回一个空的响应体。

删除索引

DELETE api/v1/indexes/<index id>

删除 ID 为 index id 的索引。

Response

响应是已删除的切片文件列表;内容类型为 application/json; charset=UTF-8

[
{
"split_id": "01GK1XNAECH7P14850S9VV6P94",
"num_docs": 1337,
"uncompressed_docs_size_bytes": 23933408,
"file_name": "01GK1XNAECH7P14850S9VV6P94.split",
"file_size_bytes": 2991676
}
]

获取所有索引元数据

GET api/v1/indexes

检索元存储中存在的所有索引的元数据。

Response

响应是一个 IndexMetadata 数组,内容类型为 application/json; charset=UTF-8

创建来源

POST api/v1/indexes/<index id>/sources

通过发布来源配置 JSON 负载来创建来源。

POST 负载

变量类型描述默认值
versionString配置格式版本,填写您当前的 Quickwit 版本。必需
source_idString来源 ID。参见 ID 验证规则必需
source_typeString来源类型:kafkakinesispulsar必需
num_pipelinesusize对于此来源每个节点运行的索引流水线数量。1
paramsobject来源配置文档 中定义的来源参数。必需

负载示例

curl -XPOST http://localhost:7280/api/v1/indexes/my-index/sources --data @source_config.json -H "Content-Type: application/json"

{
"version": "0.8",
"source_id": "kafka-source",
"source_type": "kafka",
"params": {
"topic": "quickwit-fts-staging",
"client_params": {
"bootstrap.servers": "kafka-quickwit-server:9092"
}
}
}

Response

响应是创建的来源配置,内容类型为 application/json; charset=UTF-8

切换来源

PUT api/v1/indexes/<index id>/sources/<source id>/toggle

切换(启用/禁用)ID 为 index id 的索引中的来源 source id

返回一个空的响应体。

PUT 负载

变量类型描述
enablebool如果为 true 则启用来源,否则禁用它。

重置来源检查点

PUT api/v1/indexes/<index id>/sources/<source id>/reset-checkpoint

重置 ID 为 index id 的索引中的来源 source id 的检查点。

返回一个空的响应体。

删除来源

DELETE api/v1/indexes/<index id>/sources/<source id>

删除 ID 为 <source id> 的来源。

集群 API

此端点允许您从处理请求的节点的角度检查集群的状态。

GET api/v1/cluster?format=pretty_json

参数

名称类型描述默认值
formatString响应的输出格式:jsonpretty_jsonpretty_json

删除 API

删除 API 允许删除匹配查询的文档。

创建删除任务

POST api/v1/<index id>/delete-tasks

创建一个删除任务,该任务将删除给定索引 <index id> 中与提供的查询匹配的所有文档。 此端点仅将您的删除任务添加到元存储中的删除任务队列中。删除操作最终会被执行。

Path 变量

变量描述
index id索引 ID

POST 负载 DeleteQuery

变量类型描述默认值
queryString查询文本。参见 查询语言文档必需
search_field[String]搜索字段。逗号分隔的列表,例如 "field1,field2"index_config.search_settings.default_search_fields
start_timestampi64如果设置,限制搜索具有 timestamp >= start_timestamp 的文档。值必须以秒为单位。
end_timestampi64如果设置,限制搜索具有 timestamp < end_timestamp 的文档。值必须以秒为单位。

示例

{
"query": "body:trash",
"start_timestamp": "1669738645",
"end_timestamp": "1669825046",
}

Response

响应是创建的删除任务的 JSON 表示,DeleteTask,内容类型为 application/json; charset=UTF-8

字段描述类型
create_timestamp删除查询的创建时间戳(秒)i64
opstamp与删除任务关联的唯一操作标识符u64
delete_query发布的删除查询DeleteQuery

获取删除查询列表

GET api/v1/<index id>/delete-tasks

获取给定 index_id 的删除任务列表。

Response

响应是一个 DeleteTask 数组。