zoukankan      html  css  js  c++  java
  • Elasticsearch的Groovy Script自定义评分检索

    需求:以索引中的boostapp列作为评分的基础分值,同时根据carpublishtime(数据的刷新时间字段)按时间进行衰减。

    基于Groovy脚本实现。

    1、query脚本方式:

    {
      "fields": [
        "boost",
        "ucarid",
        "boostapp",
        "carpublishtime"
      ],
      "query": {
        "function_score": {
          "query": {
            "match_all": {}
          },
          "functions": [
            {
              "script_score": {
                "script": "import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;time2=((new Date().getTime()- new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(_source.carpublishtime.replace('T',' ')).getTime())/60000);if(time2<=60)_source.boostapp+time2/5 else if(time2<=120)_source.boostapp+(time2/10-6)*8 else if(time2<=180)_source.boostapp+(time2/10-12)*5 else _source.boostapp"
              }
            }
          ],
          "boost_mode": "replace",
          "score_mode": "sum"
        }
      },
      "from": 0,
      "size": 10
    }
    

      

    2、Nest方式:

    QueryContainer mainQuery = null;
    FunctionScoreQuery funcQuery = new FunctionScoreQuery();
    funcQuery.ScoreMode = FunctionScoreMode.Sum;
    funcQuery.BoostMode = FunctionBoostMode.Replace;
    funcQuery.MaxBoost = 1000.0f;
    ScriptFilter scriptFilter = new ScriptFilter();
    scriptFilter.Script = "import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;time2=((new Date().getTime()- new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(_source.carpublishtime.replace('T',' ')).getTime())/60000);if(time2<=60)_source.boostapp+time2/5 else if(time2<=120)_source.boostapp+(time2/10-6)*8 else if(time2<=180)_source.boostapp+(time2/10-12)*5 else _source.boostapp";
    funcQuery.ScriptScore = scriptFilter;
    mainQuery &= funcQuery;
    

      

  • 相关阅读:
    python项目打包成exe
    sql同比环比计算
    七款好看文字样式纯css
    一站式智能芯片定制技术
    实战清除电脑上恶意弹出广告窗口
    GAAFET与FinFET架构
    MIPI多媒体接口
    Intel GPU实现游戏与数据中心
    芯片倒爷赚钱术
    Cache Memory技术示例
  • 原文地址:https://www.cnblogs.com/lijunhao/p/5564835.html
Copyright © 2011-2022 走看看