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

Elasticsearch搜索报错ValueError:重复传入size参数求助

解决Elasticsearch搜索的ValueError: Received multiple values for 'size'错误

问题原因

你同时在es.search()方法参数里指定了size=30,又在查询体query里定义了"size":50,两个参数冲突导致报错。另外,新版Elasticsearch Python客户端(8.x+)已不再推荐使用body参数,建议直接用关键字参数传递查询内容。

修复步骤

  1. 移除重复的size参数:统一保留一个size值,要么放在方法参数里,要么放在查询体中,不要同时设置。
  2. 适配新版客户端写法:放弃body参数,将查询、返回字段等内容拆分为对应的关键字参数。
  3. 补全KNN查询的k值:原代码中k:后面没有赋值,这是语法错误,必须指定具体的邻居数量(比如k=10)。

修改后的代码示例

helper_token = Tokenizer()
INPUT = input("Enter the Input Query ")
token_vector = helper_token.get_token(INPUT)

# 定义查询逻辑,移除size字段
query_body = {
   "_source": "Title", 
   "query":{
      "bool":{
         "must":[
            {
               "knn":{
                  "vectors":{
                     "vector":token_vector,
                     "k": 10  # 补全k的数值,根据需求调整
                  }
               }
            }
         ]
      }
   }
}
es = Elasticsearch(timeout=600, hosts=os.getenv(ENDPOINT))
# 使用新版客户端的关键字参数写法
res = es.search(
    index='seriousJokers',
    size=30,  # 统一设置返回结果数量
    query=query_body['query'],
    _source=query_body['_source'],
    request_timeout=55
)

title = [x['_source'] for x in res['hits']['hits']]
title

额外说明

如果坚持使用body参数(仅兼容旧版客户端),只需删除es.search()中的size=30参数,保留查询体里的"size":50即可,但更推荐使用新版的关键字参数写法,避免参数冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:56