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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:13:19