搜索
1.0 版引入
搜索 API 操作允许您执行搜索请求,以在集群中搜索数据。
端点
GET /<index>/_search
GET /_search
POST /<index>/_search
POST /_search
查询参数
所有参数都是可选的。
参数 | 类型 | 描述 |
---|---|---|
allow_no_indices | 布尔型 | 是否忽略不匹配任何索引的通配符。默认值为 true 。 |
allow_partial_search_results | 布尔型 | 如果请求遇到错误或超时,是否返回部分结果。默认为 true 。 |
分析器 | 字符串 | 在查询字符串中使用的分析器。 |
analyze_wildcard | 布尔型 | 更新操作是否应在分析中包含通配符和前缀查询。默认为 false 。 |
batched_reduce_size | 整数 | 在节点上减少多少个分片结果。默认为 512。 |
cancel_after_time_interval | 时间 | 搜索请求将被取消的时间。请求级别参数优先于 cancel_after_time_interval 集群设置。默认为 -1。 |
ccs_minimize_roundtrips | 布尔型 | 是否最小化节点与远程集群之间的往返次数。默认为 true 。 |
default_operator | 字符串 | 指示字符串查询的默认操作符应为 AND 还是 OR。默认为 OR。 |
df | 字符串 | 如果查询字符串中未提供字段前缀,则使用的默认字段。 |
docvalue_fields | 字符串 | OpenSearch 应使用其 docvalue 形式返回的字段。 |
expand_wildcards | 字符串 | 指定通配符表达式可以匹配的索引类型。支持逗号分隔的值。有效值为 all(匹配任何索引)、open(匹配开放、非隐藏索引)、closed(匹配关闭、非隐藏索引)、hidden(匹配隐藏索引)和 none(拒绝通配符表达式)。默认为 open。 |
explain | 布尔型 | 是否返回 OpenSearch 如何计算文档分数的详细信息。默认为 false 。 |
from | 整数 | 开始搜索的起始索引。默认值为 0。 |
ignore_throttled | 布尔型 | 如果索引被冻结,是否忽略具体、扩展的索引或带有别名的索引。默认为 true 。 |
ignore_unavailable | 布尔型 | 指定是否在响应中包含缺失或关闭的索引,并在搜索请求期间忽略不可用的分片。默认值为 false 。 |
lenient | 布尔型 | 指定 OpenSearch 是否应接受查询存在格式错误(例如,查询文本字段时使用整数)的请求。默认值为 false 。 |
max_concurrent_shard_requests | 整数 | 此请求应在每个节点上执行多少个并发分片请求。默认为 5。 |
phase_took | 布尔型 | 是否在响应中返回阶段级 took 时间值。默认为 false 。 |
pre_filter_shard_size | 整数 | 一个预过滤大小阈值,如果请求超过该阈值,将触发预过滤操作。默认为 128 个分片。 |
preference | 字符串 | 指定 OpenSearch 应在哪些分片或节点上执行搜索。有关有效值,请参阅`preference` 查询参数。 |
q | 字符串 | Lucene 查询字符串的查询。 |
request_cache | 布尔型 | 指定 OpenSearch 是否应使用请求缓存。默认值为索引设置中是否启用它。 |
rest_total_hits_as_int | 布尔型 | 是否将 hits.total 作为整数返回。否则返回一个对象。默认为 false 。 |
路由 | 字符串 | 用于将按查询更新操作路由到特定分片的值。 |
scroll | 时间 | 保持搜索上下文打开的时间。 |
search_type | 字符串 | OpenSearch 在计算相关性分数时是否应使用全局词条和文档频率。有效选项是 query_then_fetch 和 dfs_query_then_fetch 。query_then_fetch 使用分片的本地词条和文档频率对文档进行评分。它通常更快,但准确性较低。dfs_query_then_fetch 使用所有分片的全局词条和文档频率对文档进行评分。它通常较慢,但准确性较高。默认为 query_then_fetch 。 |
seq_no_primary_term | 布尔型 | 是否返回每个文档命中最后一次操作的序列号和主术语。 |
size | 整数 | 响应中包含多少个结果。 |
sort(排序) | 列表 | 要排序的 |
_source | 字符串 | 是否在响应中包含 _source 字段。 |
_source_excludes | 列表 | 要从响应中排除的源字段的逗号分隔列表。 |
_source_includes | 列表 | 要包含在响应中的源字段的逗号分隔列表。 |
stats | 字符串 | 与请求关联的值,用于额外日志记录。 |
stored_fields | 布尔型 | 获取操作是否应检索索引中存储的字段。默认为 false 。 |
suggest_field | 字符串 | OpenSearch 可用于查找相似词条的字段。 |
suggest_mode | 字符串 | 搜索时使用的模式。可用选项包括 always (根据提供的词条使用建议)、popular (使用出现次数较多的建议)和 missing (使用索引中不存在的词条的建议)。 |
suggest_size | 整数 | 返回多少个建议。 |
suggest_text | 字符串 | 建议应基于的来源。 |
terminate_after | 整数 | OpenSearch 在终止请求之前应处理的最大匹配文档(命中)数。默认为 0。 |
timeout | 时间 | 操作应等待活动分片响应多长时间。默认为 1m 。 |
track_scores | 布尔型 | 是否返回文档分数。默认为 false 。 |
track_total_hits | 布尔值或整数 | 是否返回有多少文档匹配查询。 |
typed_keys | 布尔型 | 返回的聚合和建议词条是否应在响应中包含其类型。默认为 true 。 |
version | 布尔型 | 是否将文档版本作为匹配项包含在内。 |
include_named_queries_score | 布尔型 | 是否返回带有命名查询的分数。默认为 false 。 |
preference
查询参数
preference
查询参数指定 OpenSearch 应在哪些分片或节点上执行搜索。以下是有效值:
_primary
:仅在主分片上执行搜索。_replica
:仅在副本分片上执行搜索。_primary_first
:在主分片上执行搜索,如果主分片不可用,则故障转移到其他可用分片。_replica_first
:在副本分片上执行搜索,如果副本分片不可用,则故障转移到其他可用分片。_local
:如果可能,在本地节点的自有分片上执行搜索。_prefer_nodes:<node-id-1>,<node-id-2>
:如果可能,在指定的节点上执行搜索。使用逗号分隔列表指定多个节点。_shards:<shard-id-1>,<shard-id-2>
:仅在指定的分片上执行搜索。使用逗号分隔列表指定多个分片。当与其他偏好结合使用时,_shards
偏好必须首先列出。例如,_shards:1,2|_replica
。_only_nodes:<node-id-1>,<node-id-2>
:仅在指定的节点上执行搜索。使用逗号分隔列表指定多个节点。<string>
:指定用于搜索的自定义字符串。该字符串不能以下划线字符(_
)开头。具有相同自定义字符串的搜索将路由到相同的分片。
请求正文
所有字段都是可选的。
字段 | 类型 | 描述 |
---|---|---|
aggs | 对象 | 在可选的 aggs 参数中,您可以定义任意数量的聚合。每个聚合都由其名称和 OpenSearch 支持的一种聚合类型定义。有关更多信息,请参阅聚合。 |
docvalue_fields | 对象数组 | OpenSearch 应使用其 docvalue 形式返回的字段。指定格式以特定格式返回结果,例如日期和时间。 |
fields | 数组 | 要在请求中搜索的字段。指定格式以特定格式返回结果,例如日期和时间。 |
explain | 字符串 | 是否返回 OpenSearch 如何计算文档分数的详细信息。默认为 false 。 |
from | 整数 | 开始搜索的起始索引。默认值为 0。 |
indices_boost | 对象数组 | 用于提升指定索引分数的数值。以 <index> : <boost-multiplier> 的格式指定。 |
min_score | 整数 | 指定一个分数阈值,只返回高于该阈值的文档。 |
query | 对象 | 请求中使用的 DSL 查询。 |
seq_no_primary_term | 布尔型 | 是否返回每个文档命中最后一次操作的序列号和主术语。 |
size | 整数 | 返回多少个结果。默认为 10。 |
_source | 是否在响应中包含 _source 字段。 | |
stats | 字符串 | 与请求关联的值,用于额外日志记录。 |
terminate_after | 整数 | OpenSearch 在终止请求之前应处理的最大匹配文档(命中)数。默认为 0。 |
timeout | 时间 | 等待响应的时间。默认为无超时。 |
version | 布尔型 | 是否在响应中包含文档版本。 |
请求示例
GET /movies/_search
{
"query": {
"match": {
"text_entry": "I am the night"
}
}
}
响应正文字段
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "superheroes",
"_id": "1",
"_score": 1.0,
"_source": {
"superheroes": [
{
"Hero name": "Superman",
"Real identity": "Clark Kent",
"Age": 28
},
{
"Hero name": "Batman",
"Real identity": "Bruce Wayne",
"Age": 26
},
{
"Hero name": "Flash",
"Real identity": "Barry Allen",
"Age": 28
},
{
"Hero name": "Robin",
"Real identity": "Dick Grayson",
"Age": 15
}
]
}
}
]
}
}
ext
对象
从 OpenSearch 2.10 开始,插件作者可以将 ext
对象添加到搜索响应中。ext
对象包含特定于插件的响应字段。例如,在对话式搜索中,检索增强生成(RAG)的结果是一个单一的“命中”(答案)。插件作者可以将此答案作为 ext
对象的一部分包含在搜索响应中,使其与搜索命中分开。在以下示例响应中,RAG 结果位于 ext.retrieval_augmented_generation.answer
字段中。
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 110,
"relation": "eq"
},
"max_score": 0.55129033,
"hits": [
{
"_index": "...",
"_id": "...",
"_score": 0.55129033,
"_source": {
"text": "...",
"title": "..."
}
},
{
...
}
...
{
...
}
],
}, // end of hits
"ext": {
"retrieval_augmented_generation": { // a search response processor
"answer": "RAG answer"
}
}
}