搜索实现最新的文章排序在前

新闻搜索的时候,一般需要把最近的新闻排序在前,以突出时效性。

solr实现最新的文章排序在前

在用solr进行解决该问题的方法,很简单,solr已经提供相关函数进行了实现。
recip(rord(creationDate),1,1000,1000)。

关于recip函数定义
A reciprocal function with recip(x,m,a,b) implementing a/(m*x+b). m,a,b are constants, x is any numeric field or arbitrarily complex function.

When a and b are equal, and x>=0, this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties can make this an ideal function for boosting more recent documents when x is rord(datefield).

关于rord函数定义
The reverse ordering of what ord provides.

例如:
rord(myDateField) is a metric for how old a document is: the youngest document will return 1, the oldest document will return the total number of documents.

详情参看:http://wiki.apache.org/solr/FunctionQuery

elasticsearch实现最新的文章排序在前

elasticsearch现在版本没有提供recip函数和rord函数,不能直接实现。但是我们可以依据 y = a / (m * x + b)函数来实现最近文章排序在前。各取值如下:m=3.16E-11, a=0.08, and b=0.05.

参数为:(0.08 / ((3.16*10^-11) * |x| + 0.05)) + 1.0 from 0 to 1000*60*60*24*365/
效果图如下:

实现json如下:

{
  "query": {
    "custom_filters_score": {
      "query": { ...the main query... },
      "params": {
        "now": ...current time when query is run, expressed as milliseconds since the epoch...
      },
      "filters": [
        {
          "filter": {
            "exists": {
              "field": "date"
            }
          },
          "script": "(0.08 / ((3.16*pow(10,-11)) * abs(now - doc[‘date‘].date.getMillis()) + 0.05)) + 1.0"
        }
      ]
    }
  }
}

java代码如下:

QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder("中国");
        queryBuilder.analyzer("ik").field("title");
return new CustomFiltersScoreQueryBuilder(queryBuilder).add(query,
    			"(0.08 / ((3.16*pow(10,-11)) * abs(now - doc[‘updatetime‘].value) + 0.05)) + 1.0"
				).param("now", System.currentTimeMillis()/1000l);

备注:我们updatetime存储的是一个毫秒级的长整数,具体情况具体分析。

以上方法来自于:http://jontai.me/blog/2013/01/advanced-scoring-in-elasticsearch/

本文固定链接: http://www.chepoo.com/search-realization-latest-articles-sorted-first.html | IT技术精华网

时间: 2025-01-08 21:30:31

搜索实现最新的文章排序在前的相关文章

WordPress主题开发实例:显示最新发表文章

实现效果 制作网站的时候,想在页面左栏显示最新发表的文章,如: 一.先开启侧边栏工具,在functions.php加上 $args = array( 'name' => __( '分类侧边栏'), 'id' => 'cat-01', 'description' => '将在分类页显示侧边栏', 'class' => '', 'before_widget' => '<li id="%1$s" class="widget %2$s"&

【16.09.01】【三零技术】最新更新文章推荐

1.[PHP编程:PHP简单无限分类类代码] 简介:这里就不多解释原理了,直接发代码.PS:这里代码是不能直接使用的,必须结合我的一些其他库类.应该说思想才是最重要的,这里主要提供一种分类的思路.... 地址:http://www.q3060.com/list3/list117/34130.html 2.[PHP编程:PHP简单的采集程序] 简介:    (修改了下,增加了数据缓存功能..汗,没有使用lite_cache了,自己写了个最简单的那种..)                      

phpcms v9更改后台文章排序的方法

后台文章排序怎么才可以按自己输入的数字排列?如按4,3,2,1,从大到小排列?实现方法如下: 修改文件: phpcms\modules\content 中的 content.php 代码如下: $datas = $this->db->listinfo($where,'id desc',$_GET['page']); 改成 代码如下: $datas = $this->db->listinfo($where,'listorder ASC, id desc',$_GET['page'])

最新资源文章分享

p{text-indent:2em;}h1{font-size:18px}前端开发whqet,csdn,王海庆,whqet,前端开发专家 免费高清!10个无版权限制的大图特供网站 私人定制!13个在线纹理生成资源网站 免费商用!高清无码的的影片素材分享站MAZWAI 个性分明!25个狂拽帅酷设计工作室网站赏析 不容错过!2014年最赞的10个扁平化网站 10 Awesome Free Ecommerce Website Templates (PSD) 17 Free Landing Page H

dedecms织梦修改文章后如何不改变时间文章排序?

dedecms织梦修改文章后台默认的情况是这样的: 当你编辑完了点击提交,DEDECMS就会自动的把原先发布的时间改成当前的.也因此,在文章列表排序会把新编辑的文章排到前面.这个过程对很多情况都是合理的,但是有些时候,我们不需要更新当前的时间,只需用原先发布的时间就行.其实解决方法很简单:(以目前最新的DEDECMS5.7 SP1为例) 1,找到 dede/templets/article_edit.htm 2,在article_edit.htm文件里搜索找到$nowtime = GetDate

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 表示根据cid,author分组,在分组内部根据id排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),而mysql数据库就没有这样的统计函数,需要自己写复杂的sql来实现. 1,录入测试数据 USE csd

最新勒索软件WannaCrypt病毒感染前清除处理及加固

昨天.今天.乃至最近一段时间,安全圈甚至全中国将聚焦在勒索病毒"WannaCrypt",很多人都以为安全离我很远,其实不然,过去病毒可能仅仅是在线攻击,而今天出现的"WannaCrypt"勒索病毒达到一定条件后,将感染内网,注意是内网!当然外网也是感染对象,目前国内很多高校.政府.企业和个人均出现了大面积的感染.很多安全公司将其定义为"蠕虫"病毒,其危害相当巨大,一旦被感染,只有两种途径来解决,一种是支付赎金,另外一种就是重装系统,所有资料全部归

PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现翻页.搜索.排序 * */ public function search($perPage = 5) //$perPage控制显示条数 { /***********翻页***********/ //取出总的记录数 $count = $this->count(); //生成翻页类的对象 $pageOb

签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件

签发token 源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接收有username.password的post请求 # 2)post方法将请求得到的数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处