Elasticsearch搜索报错ValueError:重复传入size参数求助
解决Elasticsearch搜索的
ValueError: Received multiple values for 'size'错误 问题原因
你同时在es.search()方法参数里指定了size=30,又在查询体query里定义了"size":50,两个参数冲突导致报错。另外,新版Elasticsearch Python客户端(8.x+)已不再推荐使用body参数,建议直接用关键字参数传递查询内容。
修复步骤
- 移除重复的size参数:统一保留一个
size值,要么放在方法参数里,要么放在查询体中,不要同时设置。 - 适配新版客户端写法:放弃
body参数,将查询、返回字段等内容拆分为对应的关键字参数。 - 补全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
相关产品推荐
相关产品推荐

