使用Python向SOLR 9.0.0发送带Facet的JSON请求报错400求助
问题解决:SOLR 9 JSON POST请求Facet格式错误
错误原因
SOLR的JSON查询API(/query端点)不支持将facet.field、facet.matches这类参数作为顶级JSON键,这些Facet相关配置必须嵌套在facet对象内部,这和URL参数的扁平结构逻辑不同。
修正后的JSON请求格式
正确的JSON结构需要把Facet字段、匹配规则、查询都放在facet对象里:
{ "query": "*:*", "limit": 0, "facet": { "fields": [ {"field": "sentence", "matches": "[a-z]{2}"} ], "queries": ["sentence:/[a-z]{2}/"] } }
对应的Python代码调整
修改solr_query的结构,将Facet配置嵌套到facet字典中:
import requests import json prerule = '[a-z]{2}' solr_query = { "query": "*:*", "limit": 0, "facet": { "fields": [{"field": "sentence", "matches": prerule}], "queries": [f"sentence:/{prerule}/"] } } solr_headers = {'Content-type': 'application/json'} resp = requests.post( lexsettings.solr_url + '/query', data=json.dumps(solr_query), headers=solr_headers, auth=(lexsettings.solr_user, lexsettings.solr_pass) ) jresp = json.loads(resp.content) print('solrlist: ' + str(jresp))
关键说明
facet.fields用数组形式,每个元素可以是字段名字符串,或者包含field和对应参数(如matches)的对象,能精准为sentence字段指定匹配规则facet.queries数组用来定义Facet查询,对应原URL中的facet.query参数- 不需要单独设置
"facet": "true",只要facet对象存在,SOLR会自动启用Facet功能
内容的提问来源于stack exchange,提问作者sariDon
相关产品推荐
相关产品推荐

