GET 127.0.0.1/mytest/doc/_search { "query": { "function_score": { "query": {.....}, //主查询,查询完后这裡自己会有一个评分,就是old_score "field_value_factor": {...}, //在old_score的基础上,给他加强其他字段的评分,这裡会产生一个加强score ,如果只有一个
这个查询使用的function_score,query中通过title搜索“台风”,在functions我们增加了两个打分,一个是random_score,随机生成一个得分,得分的weight权重是1,第二个是如果标题中有“杭州”,得分权重为42, random_score顾名思义就是生成一个(0,1)之间的随机得分,我能想到的一个应用场景是,有一天产品要求:每个人看到新...
GET127.0.0.1/mytest/doc/_search{"query":{"function_score":{"query":{...},//主查询,查询完后这裡自己会有一个评分,就是old_score"field_value_factor":{...},//在old_score的基础上,给他加强其他字段的评分,这裡会产生一个加强score,如果只有一个加强function时,直接将加强函数名写在query下面就可...
hello java 1.4877305 id:3 java spark 1.2576691 3.1.3 自定义计算方式实现 function_score boost_mode 相乘 查询公式及参数如下: field 参与计算字段式 是文章的浏览量 countnum boost_mode 是 multiply 相乘的方式 计算方式 old_score x 新分数 modifier 计算方式 式 log1p, 就是 log(1+xxx) 的计算方式 ne...
ElasticSearch的自定义评分功能适用于定制化场景,如综合排序。可通过function_score实现价格、距离等字段的评分排序,支持衰减函数、自定义脚本等多种方式,还可通过ESJavaApi实现,满足个性化需求。
GET /blog/_search { "query": { "function_score": { "query": { "match": { "title": "java入门" } }, "functions": [ { "script_score": { "script": { "params": { "access_num_ratio": 2.5 }, "lang": "painless", "source": "doc['access_num'].value * params.access_num_...
{"script_score": {"script": {"params": {"access_num_ratio":2.5},"lang":"painless","source":"doc['access_num'].value * params.access_num_ratio"} } } ] } } } 查询结果如下 java入门到精通的分数,上面的常规查询是1.474477,现在是110.58578:就是1.474477*2.5*30=110.585775。
java代码如下:用的weightFactorFunction和gaussDecayFunction GaussDecayFunctionBuilder dateGaussDecayFunctionBuilder=ScoreFunctionBuilders.gaussDecayFunction("截止时间",time , "100d", "0s").setWeight(10);FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.Filter...
因为 function score query 权重分查询,无相关的数据默认分值为 1。如果想除去,设置一个 setMinScore 分值即可。 三、springboot-elasticsearch工程代码详解 具体代码见 GitHub - github.com/JeffLi1993/s 1.pom.xml 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/...
} return retList; } 根据学生列表返回名称列表的代码为: List<String> names = map(students, t -> t.getName()); 将学生名称转换为大写的代码为: students = map(students, t -> new Student( t.getName().toUpperCase(), t.getScore()));...