2017-02-22 58 views
0

我一直在努力解決這個問題幾個小時了。我正在嘗試使用腳本分數(groovy)在搜索中實現自定義分數。Elasticsearch:在執行自定義分數腳本時沒有映射找到映射

映射:

{ 
"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

您在映射中缺少「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" 
     } 
     } 
    } 
} 
+2

感謝Donglecow的努力,但我終於明白了這個問題。它不是date_of_creation字段。我試圖訪問'文檔'中的'對象',這是不可能的,因爲它可以給我的是變量。 doc ['m_skill.skillarea']做了詭計。 –