elasticsearch painless脚本评分

  1. painless是一种新支持的脚本语言,语言格式和java十分类似。可以参考以下文档:

    painless语言介绍

    painless api

    painless 实例

  2. 脚本参数

  3. score_mode计算functions中的分数形式,加减乘除,boost_mode计算最外层的分数形式,加减乘除。所以最后总分是tf/idf分数加上脚本得分。

put http://172.19.12.249:9200/indextest0193/player/_bulk?refresh
{"index":{"_id":1}}
{"content" : "测试语句1"}
{"index":{"_id":2}}
{"content" : "我的测试语句2"}
post http: //172.19.12.249: 9200/indextest0193/_search{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "content": "测"
        }
      },
      "script_score": {
        "script": {
          "lang": "painless",
          "source": "if(doc['content.keyword'].value.startsWith(params.keyword))return 1; return 0;",
          "params": {
            "keyword": "测"
          }
        }
      },
      "boost_mode": "sum"
    }
  }
}
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 1.287682,
        "hits": [
            {
                "_index": "indextest0193",
                "_type": "player",
                "_id": "1",
                "_score": 1.287682,
                "_source": {
                    "content": "测试语句1"
                }
            },
            {
                "_index": "indextest0193",
                "_type": "player",
                "_id": "2",
                "_score": 0.2876821,
                "_source": {
                    "content": "我的测试语句2"
                }
            }
        ]
    }
}

 

posted on 2018-08-30 15:35  疯狂的小萝卜头  阅读(670)  评论(0编辑  收藏  举报