具有余弦相似度运行时错误的弹性搜索查询?

如何解决具有余弦相似度运行时错误的弹性搜索查询?

创建了数据类型为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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?