先上查询语句
{
"from": 0,
"size": 100,
"query": {
"function_score": {
"query": {
"bool": {
"filter": [
{
"term": {
"data_type": "wl"
}
}
],
"must": {
"match": {
"long_desc": "金属"
}
}
}
},
"script_score": {
"script": {
"source": f"cosineSimilarity(params.queryVector, doc['data_vector'])+1.0",
"params": {
"queryVector": [0,1,2,3]
}
}
}
}
}
}
解释:
- 对于每个文档,先使用query查询出文档,然后再通过余弦相似度计算出一个分数,最终得分是 余弦分数*query的得分,如果想改变这个行为,可以参考官网function score query中的
boost_mode
参数 data_vector
这是我自己索引中的字段,你应该改为你索引中 向量字段的名字queryVector
这个就是向量的值,维度要和mapping中定义的一样- 至于为什么+1, 官网中也说了,是为了防止得到负数,因为得到负数,ES会抛出错误