问题描述
我正在尝试在script_score函数中使用余弦相似度。当我要衡量相似性的文档中缺少密集矢量字段时,查询中断。
我花了很多时间搜索如何检查文档中是否存在该字段,但是无法成功。
我尝试过:
- 使用doc ['field_name'] == null 检查
- 使用doc ['field_name']。size()== 0进行检查
- 使用doc ['field_name']。value == null 检查
我正在使用的查询是
form
我遇到以下错误
POST /sidx-4111c0fc-a8ba-523c-9851-34a2b803643b/_search/
{
"query": {
"function_score": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "nri customer bank loan","fields": [],"fuzziness": "AUTO"
}
}
}
},"functions": [
{
"script_score": {
"script": {
"source": "double score =0; score = doc['dense_vector_field'] == null ?0: cosinesimilarity(params.qv,'dense_vector_field'); if(score>=0.8 && score<=1.0){return 10000+score;} else if(score>=0.60 && score<0.80){return score+1000;} else{return score+100}","params": {
"qv": [1,1,1]
}
}
}
}
],"boost_mode": "sum"
}
}
}
有人可以帮我吗
解决方法
您还可以调用doc.containsKey('dense_vector_field')
,它返回一个布尔值。
在相关说明中,当参数中唯一的键为params.queryVector
时为什么还要访问qv
?