我几个小时以来一直在努力解决这个问题。我正在尝试使用脚本分数(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自定义分数实现相同的是一个好主意吗?
任何帮助都会受到欢迎。
答案 0 :(得分:0)
你错过了" date_of_creation"的双引号在您的映射中。这可能会导致您的问题。我已在此答案中为您添加了经过验证的JSON映射。
{
"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"
}
}
}
}