1. 程式人生 > >elasticsearch系列(七)java定義score

elasticsearch系列(七)java定義score

集群 scrip image search 支持 name dsr 計算方法 dynamic

概述

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 &

5.使用

{

  "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

6.更新插件

由於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

elasticsearch系列(七)java定義score