异步搜索 断点续查与容错处理 异步搜索支持断点续查,用户可以在查询任务中断或超时时重新查询任务状态或继续执行未完成的任务。这种容错机制增强了查询的可靠性,特别是在网络波动或系统故障情况下。 查询任务管理 用户可以通过任务 ID 管理和监控查询任务,包括取消正在运行的查询、检查任务进度、或者在任务完成后获取结果。这种灵活的任务管理方式为用户提供了更好的控制能力。 技术实现与应用 使用异步搜索功能非常简单,用户可以通过搜索引擎的 REST API 发起异步查询请求。系统会返回一个任务 ID,用户可以使用该 ID 查询任务状态、获取中间结果或最终结果。搜索引擎还提供了管理接口,允许用户查看当前的异步任务列表、取消任务或调整任务的超时时间。 在高并发或复杂查询场景下,异步搜索减少了前端的等待时间,使得用户可以在任务后台执行时继续其他工作,从而提高了工作流的效率和用户体验。 操作示例 我们以Elasticsearch为例。 创建索引: PUT citydata { "settings": { "numberofreplicas": 0 }, "mappings": { "properties": { "city": { "type": "keyword" } } } } 插入数据: POST citydata/doc { "city": "Shanghai" } POST citydata/doc { "city": "Beijing" } POST citydata/doc { "city": "Guangzhou" } 提交异步搜索请求: POST opendistro/asynchronoussearch/?pretty&size10&waitforcompletiontimeout1ms&keeponcompletiontrue&requestcachefalse { "aggs": { "city": { "terms": { "field": "city", "size": 10 } } } } 这个命令会返回一个id: "id" : "FnJRN1FZek04UTFldERyWThfZUtMaFEDOTMyFEhuZkZFbzRCbERJd09IVC0zTG9IATY" 获取异步搜索结果: GET opendistro/asynchronoussearch/FnJRN1FZek04UTFldERyWThfZUtMaFEDOTMyFEhuZkZFbzRCbERJd09IVC0zTG9IATY?pretty 返回: { "id" : "FnJRN1FZek04UTFldERyWThfZUtMaFEDOTMyFEhuZkZFbzRCbERJd09IVC0zTG9IATY", "state" : "STORERESIDENT", "starttimeinmillis" : 1709711940616, "expirationtimeinmillis" : 1709798340616, "response" : { "took" : 90, "timedout" : false, "shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 3, "relation" : "eq" }, "maxscore" : 1.0, "hits" : [ { "index" : "citydata", "type" : "doc", "id" : "G3fFEo4BlDIwOHTfroB", "score" : 1.0, "source" : { "city" : "Shanghai" } }, { "index" : "citydata", "type" : "doc", "id" : "HHfFEo4BlDIwOHTfrrH", "score" : 1.0, "source" : { "city" : "Beijing" } }, { "index" : "citydata", "type" : "doc", "id" : "HXfFEo4BlDIwOHTf7oM", "score" : 1.0, "source" : { "city" : "Guangzhou" } } ] }, "aggregations" : { "city" : { "doccounterrorupperbound" : 0, "sumotherdoccount" : 0, "buckets" : [ { "key" : "Beijing", "doccount" : 1 }, { "key" : "Guangzhou", "doccount" : 1 }, { "key" : "Shanghai", "doccount" : 1 } ] } } } } 搜索引擎的异步搜索功能为处理复杂和长时间运行的查询提供了极大的灵活性和效率。通过将查询任务移至后台执行,异步搜索不仅提升了系统的性能,还改善了用户的操作体验。 无论是在处理大数据集、优化系统资源利用,还是在实现查询任务的灵活管理方面,异步搜索都为用户提供了一个强大而高效的解决方案。