elasticsearch系列(七)java定義score


概述

ES支持groovy 和 java兩種語言自定義score的計算方法,groovy甚至可以嵌套在請求的參數中,有點厲害,不過不在本篇討論范圍。

如何用自定義的java代碼來定義score如何產生,這用到了ES的插件功能

關於es插件的相關操作,可以通過以下命令獲得

./bin elasticsearch-plugn –h

 

操作步驟

1.增加配置

首先需要在ES的配置中增加以下,

舊版本是

script.disable_dynamic: false

 

目前用的ES是5.2.2,根據日志提示,改成如下,改完后需要重啟ES

script.inline: true

script.stored: true

 

不得不說這個日志提供的信息真不錯

 

 

如果不加這兩條配置,則會這樣這種錯誤

 

2.寫java代碼

//java代碼格式參考

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/modules-scripting-native.html

 

3.寫配置文件

配置文件格式參考

https://github.com/elastic/elasticsearch/blob/master/buildSrc/src/main/resources/plugin-descriptor.properties

 

4.上傳到ES集群

在$ELASTICSEARCH_HOME/plugins新建一個文件夾,這個文件夾的名稱就是這個插件的名稱,

例如有 三個文件夾

可以通過如下命令找到他們

 

在新建的文件夾中,導入jarplugin-descriptor.properties文件(必須有)

 

5.重啟ES服務

kill -9 pid

nohup ./elasticsearch & 

 

6.使用

{

  "query": {

    "function_score": {

      "query": {

        "match": {

          "your_fields": "xxxx"

        }

      },

      "functions": [

        {

          "script_score": {

            "script": {

              "inline": "key",

              "lang": "native",

              "params": {

                "your_fields": "xxxxx"

              }

            }

          }

        }

      ]

    }

  }

}

 

 

key解釋:

Key

解釋

備注

inline

調用插件的key,和插件名稱是兩個東西

在NativeScriptFactory接口中的
getName()方法設置

lang

自定義方式

native意思是用java原生實現

 

 

//關於自定義function-script-score

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#function-script-score

 

7.更新插件

由於ES集群會緩存插件代碼,就算把插件刪了依然可用,目前還是需要重啟來更新插件

 

參考資料

//自定義java制作插件必要的步驟

https://www.elastic.co/guide/en/elasticsearch/plugins/5.2/plugin-authors.html#_plugin_structure

//github完整插件

https://github.com/momoxixi/elasticsearch-feature-vector-scoring

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM