如何解决具有余弦相似度运行时错误的弹性搜索查询?
创建了数据类型为dense_vector => dims: 512 的索引并将json格式数据上传到elasticsearch中,根据查询向量[4,3.4,-0.2]得到具有余弦相似度的搜索查询。
参考文章https://medium.com/version-1/vector-based-semantic-search-using-elasticsearch-48d7167b38f5
创建索引:
put jsonsample2/
{
"settings": {"number_of_shards": 2,"number_of_replicas": 1},"mappings":
{
"dynamic": "true","_source": {"enabled": "true"},"properties":
{
"Document_name": {"type": "text"},"Doc_vector": {"type": "dense_vector","dims": 512}
}
}
}
GET jsonsample2/_search
{
"query": {
"script_score": {
"query" : {
"match_all": {}
},"script":
{
"source": "cosinesimilarity(params.query_vector,'Doc_vector')","params":
{
"query_vector": [4,-0.2]
}
}
}
}
}
{
"took" : 1,"timed_out" : false,"_shards" : {
"total" : 2,"successful" : 1,"skipped" : 0,"Failed" : 1,"failures" : [
{
"shard" : 0,"index" : "jsonsample2","node" : "e9WAytp6Si65x_YDRuLQcg","reason" : {
"type" : "script_exception","reason" : "runtime error","script_stack" : [ "org.elasticsearch.xpack.vectors.query.scoreScriptUtils$DenseVectorFunction.getEncodedVector(scoreScriptUtils.java:100)","org.elasticsearch.xpack.vectors.query.scoreScriptUtils$Cosinesimilarity.cosinesimilarity(scoreScriptUtils.java:179)","cosinesimilarity(params.query_vector," ^---- HERE"
],"script" : "cosinesimilarity(params.query_vector,"lang" : "painless","position" : {
"offset" : 38,"start" : 0,"end" : 51
},"caused_by" : {
"type" : "illegal_argument_exception","reason" : "A document doesn't have a value for a vector field!"
}
}
}
]
},"hits" : {
"total" : {
"value" : 0,"relation" : "eq"
},"max_score" : null,"hits" : [ ]
}
}
解决方法
问题描述如下:
"reason" : "文档没有向量字段的值!"
要检查文档是否有缺失值,您可以使用 doc['field'].size() == 0
你的脚本应该是这样的:
"source": "doc['Doc_vector'].size() == 0 ? 0 : cosineSimilarity(params.query_vector,'Doc_vector')"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。