Je voudrais stocker un tableau de dense_vector
dans mon document mais cela ne fonctionne pas comme pour les autres types de données, par exemple.
PUT my_index
{
"mappings": {
"properties": {
"my_vectors": {
"type": "dense_vector",
"dims": 3
},
"my_text" : {
"type" : "keyword"
}
}
}
}
PUT my_index/_doc/1
{
"my_text" : "text1",
"my_vector" : [[0.5, 10, 6], [-0.5, 10, 10]]
}
retours :
'1 document(s) failed to index.',
{'_index': 'my_index', '_type': '_doc', '_id': 'some_id', 'status': 400, 'error':
{'type': 'mapper_parsing_exception', 'reason': 'failed to parse', 'caused_by':
{'type': 'parsing_exception',
'reason': 'Failed to parse object: expecting token of type [VALUE_NUMBER] but found [START_ARRAY]'
}
}
}
Comment puis-je y parvenir ? Les différents documents auront un nombre variable de vecteurs, mais jamais plus d'une poignée.
De plus, je voudrais ensuite l'interroger en effectuant un cosineSimilarity
pour chaque valeur de ce tableau. Le code ci-dessous est la façon dont je le fais normalement lorsque je n'ai qu'un seul vecteur dans le doc.
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "(1.0+cosineSimilarity(params.query_vector, doc['my_vectors']))",
"params": {"query_vector": query_vector}
}
}
Idéalement, j'aimerais avoir la similarité la plus proche ou une moyenne.