У меня есть данные, которые выглядят так:
df = {
"3498573": [
{
"274985537": 0.43453,
"274933900": 0.5344,
"27845502": 0.32359
}
],
"4394879": [
{
"932847": 0.23984734
"3454325": 0.2398472
}
]
}
Это вложенный словарь внутри списка внутри словаря.
Другой способ его представления:
{
"customer_id": [
{
"p_id": score,
"p_id": score,
"p_id": score
}
],
"customer_id": [
{
"p_id": score
"p_id": score
}
]
}
Мне интересно, как индексировать эти данные в ElasticSearch.Я использую Python API Flexiblesearch и создал отображение следующим образом:
request_body = {
"settings" : {
"number_of_shards": 5,
"number_of_replicas": 1
},
'mappings': {
'recommended': {
'properties': {
'customer_id': {
"type": "nested",
"properties": {
"master_product_id": {
"type": "text"
},
"score": {
"type": "integer"
}
}
}
}}}
}
print("creating 'example_index' index...")
es.indices.create(index = 'example_index2', body = request_body)
Я получаю ошибку <400> при попытке напрямую загрузить данные следующим образом:
requests.post(address, data=df, headers=headers)
Нужно ли мне формировать данные по-другому, как показано ниже, для их загрузки?Если так, то как мне придать ему такую форму?
nested = ({
"customer_id": "13984209",
"recommended_products": [
{
"master_product_id": "945873",
"score": 0.94879437
}
],
"customer_id": "309248",
"recommended_products": [
{
"master_product_id": "2383",
"score": 0.36367326
}
]
})