在 Azure 门户上更新索引架构后,我收到以下信息。
JSONDecodeError at /updateIndex/
架构已成功更新,但我收到此错误以及 500 状态代码。
这是我的功能
@csrf_exempt
def updateIndex(request):
url = 'https://search-test.search.windows.net/indexes/hotels-quickstar11t?api-version=2020-06-30'
index_schema = {
"name": "hotels-quickstar11t",
"fields": [
{"name": "HotelId", "type": "Edm.String", "key": "true", "filterable": "true"},
{"name": "HotelName", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "true", "facetable": "false"},
{"name": "Description", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "false", "facetable": "false", "analyzer": "en.lucene"},
{"name": "Description_fr", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "false", "facetable": "false", "analyzer": "fr.lucene"},
{"name": "Category", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "Tags", "type": "Collection(Edm.String)", "searchable": "true", "filterable": "true", "sortable": "false", "facetable": "true"},
{"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "Rating", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "Address", "type": "Edm.ComplexType",
"fields": [
{"name": "StreetAddress", "type": "Edm.String", "filterable": "false", "sortable": "false", "facetable": "false", "searchable": "true"},
{"name": "City", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "StateProvince", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "PostalCode", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "Country", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"}
]
},
{"name": "Price", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "Cost", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
{"name": "CostTest", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"}
]
}
headers = {'Content-Type': 'application/json', 'api-key': 'key'}
response = requests.put(url, headers=headers, json=index_schema)
index = response.json()
return HttpResponse(response)
有什么想法吗?
最佳答案
基本上,问题在于您期望从搜索服务返回 JSON 格式的响应,而该服务实际上在更新索引时默认情况下不会返回任何内容。因此,以下代码行会引发错误:
index = response.json()
如果您想要返回 JSON 响应,则需要使用 return=representation
设置 Prefer
请求 header 。当您这样做时,您应该会看到 JSON 响应。
请更改以下代码行:
headers = {'Content-Type': 'application/json', 'api-key': 'key'}
至
headers = {'Content-Type': 'application/json', 'api-key': 'key', 'Prefer': 'return=representation'}
并且您不应该收到此错误。
您可以在这里阅读更多相关信息:https://learn.microsoft.com/en-us/rest/api/searchservice/update-index#response
关于python - 成功更新资源后,我收到 JSON 解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63117616/