You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSearch-py search方法设置timeout报错问题求助

解决OpenSearch-py搜索超时设置报错问题

问题场景

使用OpenSearch-py调用search接口时设置timeout=30,触发如下错误:

ValueError: Timeout value connect was 30.0, but it must be an int, float or None.

尝试过字符串"30"、"30s",数值30.0,甚至用int()/float()转换,均报相同错误,完整回溯:

Traceback (most recent call last):
  File "/usr/src/app/opensearchpy/connection/http_requests.py", line 179, in perform_request
    response = self.session.send(prepared_request, **send_kwargs)
  File "/usr/src/app/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/usr/src/app/requests/adapters.py", line 426, in send
    timeout = TimeoutSauce(connect=timeout, read=timeout)
  File "/usr/src/app/urllib3/util/timeout.py", line 94, in __init__
    self._connect = self._validate_timeout(connect, 'connect')
  File "/usr/src/app/urllib3/util/timeout.py", line 135, in _validate_timeout
    raise ValueError("Timeout value %s was %s, but it must be an "
ValueError: Timeout value connect was 30.0, but it must be an int, float or None.

问题原因

OpenSearch-py的search方法里的timeout参数是OpenSearch服务端的查询超时时间(支持"30s"这类字符串格式),但该参数会被错误传递给底层requests库作为连接超时时间。而requests/urllib3要求连接超时必须是纯数值类型,OpenSearch-py内部的参数转换逻辑导致传递时出现类型异常。

解决方案

方案1:初始化客户端时设置全局超时

不要在search方法中设置timeout,而是在初始化OpenSearch客户端时配置连接/读取超时:

from opensearchpy import OpenSearch

# 初始化客户端时设置全局超时
client = OpenSearch(
    hosts=["http://localhost:9200"],
    http_compress=True,
    timeout=30,  # 全局超时,单位秒
    # 也可分别设置连接和读取超时
    # timeout=(10, 30)  # (连接超时, 读取超时)
)

# 调用search时无需再传timeout参数
client.search(
    index=index,
    body=search_body,
    scroll=scroll,
    ignore=ignore,
    size=size
)

方案2:请求级单独设置超时

如果需要给单个请求单独设置超时,使用request_timeout参数(这才是传递给requests的合法超时参数):

self.get_client().search(
    index=index,
    body=search_body,
    scroll=scroll,
    ignore=ignore,
    size=size,
    request_timeout=30  # 请求级别超时,对应requests的timeout参数
)

参数区别

  • timeout:OpenSearch服务端的查询超时,支持"30s"格式,不要与客户端超时混淆
  • request_timeout:客户端(requests库)的超时,必须为数值类型,控制连接和读取的超时时间

内容的提问来源于stack exchange,提问作者Linora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:52:33