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;
    

      

  • 相关阅读:
    npm 安装Vue环境时报错
    WinSCP与SecureCRT
    LeetCode100---Same Tree
    LeetCode404---Sum of Left Leaves
    LeetCode283---Move Zeroes
    LeetCode344---Reverse String
    Java多线程一
    Java知识点总结
    Java泛型
    深入浅出设计模式学习笔记四:单例模式
  • 原文地址:https://www.cnblogs.com/lijunhao/p/5564835.html
Copyright © 2011-2022 走看看