我已经为这个问题苦苦挣扎了好几个小时了。我正在尝试使用脚本分数(groovy)在我的搜索中实现自定义分数。
映射:
{
"properties": {
"m_skill": {
"properties": {
"actual_period": {
"type": "long"
},
"area_display": {
"type": "string"
},
"c": {
"type": "double"
},
"capability": {
"type": "string"
},
"capability_display": {
"type": "string"
},
"order_wt": {
"type": "double"
},
"skillarea": {
"type": "string"
},
"star_wt": {
"type": "double"
},
"w": {
"type": "double"
}
}
}
},
"personid": {
"type": "string"
},
date_of_creation": {
"type": "long"
},
"phone": {
"properties": {
"c": {
"type": "long"
},
"v": {
"type": "string"
}
}
}
}
(m_skill 是一个数组)
询问 :
{"match_all":{}}
评分脚本:
return doc['m_skill'].values.star_wt.sum()
错误 :
No field found for [m_skill] in mapping with types [peopleworld]
但是当我对“date_of_creation”进行同样的尝试时,我没有得到任何例外。我发现有些人在谈论同样的问题,但几乎没有任何帖子有回复。有没有人遇到过这样的问题。我究竟做错了什么?
另一个问题,我的公式比我上面写的要复杂得多。用简单的语言来说,就像当用户要求一组技能时,我选择具有所要求技能的文档,并根据他们的 star_wt 我给他们一个分数,用于对最终结果集进行排序。使用 elasticsearch 自定义分数实现相同功能是个好主意吗?
任何帮助都将受到欢迎。