Elasticsearch: поле не найдено в отображении при выполнении пользовательского сценария оценки

Я боролся с этой проблемой в течение нескольких часов. Я пытаюсь реализовать пользовательский счет в моем поиске, используя сценарий (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 присваиваю им баллы, которые используются для сортировки окончательного набора результатов. Это хорошая идея для реализации того же с использованием настраиваемой оценки эластичного поиска?

Любая помощь будет приветствоваться.

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"
         }
      }
   }
}
Другие вопросы по тегам