0

我已经为这个问题苦苦挣扎了好几个小时了。我正在尝试使用脚本分数(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 自定义分数实现相同功能是个好主意吗?

任何帮助都将受到欢迎。

4

1 回答 1

1

您在映射中缺少“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"
         }
      }
   }
}
于 2017-02-24T15:35:14.563 回答