现在有个需求是这样子的:
需要计算搜索词的权重设置其为总排序权重的0.6,其他因素的权重为0.4
其他因素中还有详细的划分.
这里我们用Solr如何来实现?众所周知solr默认的排序方式为按照文本相似度来进行降序排列的,现在我们要将打分的Score作为排序的一个因子来利用.就需要单独的获取到Score.
网上是有一些通过继承类来实现的方式的.这里我不再累述,而说一种通过Solr内置的函数来实现的方式.

solr提供了函数查询的方式,也能用函数的计算结果来作为排序的字段.我们用solr的函数是可以拿到查询的score打分的,下面给出相应的证明:

原始查询打分如图:下面使用solr获取可以操作的score,如图:能看出来,我们自己得到的myscore和原始的score的大小是一致的.

下面看一个例子及其相应的打分函数的实现:

①匹配权重系数:0.6,
权重因子系数:
标题 0.6   正文0.4
②其他权重系数:0.4
评论得分:0.3
点赞数得分:0.25
最后评论时间得分:0.2
浏览量得分:0.15
收藏数得分:0.1

拿搜索词 话题 来举例子,函数如下:

myscore:sum(product(scale(query({!v='topicName:"话题"^3  OR topicContent:话题^2'}),0,1),0.6),product(sum(product(scale(topicReplyNum,0,1),0.3),product(scale(likeCount,0,1),0.25),product(scale(collectionNum,0,1),0.1),product(scale(countPV,0,1),0.15),product(scale(lastReplyTime,0,1),0.2)),0.4))

我们用函数来排序能看出来综合排序是有效果的,score大的不一定在前面了
由于考虑到性能问题,真正代码实现时可以牺牲一部分的准确性,先离线计算一下其他部分的分值,存储起来,直接综合文本相似度和其他权重即可.能提高一部分的查询效率.但是数据量太大还是会存在问题(需要考虑做rerank来进行一个topN的精确排序)
离线部分索引代码和查询部分的生成排序的函数如下:

查询部分的排序字段使用函数来实现:到此基本上综合多因素排序部分基本上可以算完成了,下面就是根据的搜索效果来调整算法和参数了!

Solr进阶之Solr综合文本相似度的多因素权重排序实现的更多相关文章

  1. 机器学习综合库gensim 简单搞定文本相似度

    不废话直接代码吧 # 1.模块导入 import jieba import gensim from gensim import corpora from gensim import models fr ...

  2. solr入门之权重排序方法初探之使用edismax改变权重

    做搜索引擎避免不了排序问题,当排序没有要求时,solr有自己的排序打分机制及sorce字段 1.无特殊排序要求时,根据查询相关度来进行排序(solr自身规则) 2.当涉及到一个字段来进行相关度排序时, ...

  3. TF-IDF 文本相似度分析

    前阵子做了一些IT opreation analysis的research,从产线上取了一些J2EE server运行状态的数据(CPU,Menory...),打算通过训练JVM的数据来建立分类模型, ...

  4. Solr系列一:Solr(Solr介绍、Solr应用架构、Solr安装使用)

    一.前言 前面已经学习了Lucene的分词.索引详解.搜索详解的知识,已经知道开发一个搜索引擎的流程了.现在就会有这样的一个问题:如果其他的系统也需要使用开发的搜索引擎怎么办呢?这个时候就需要把开发的 ...

  5. Solr学习之四-Solr配置说明之二

    上一篇的配置说明主要是说明solrconfig.xml配置中的查询部分配置,在solr的功能中另外一个重要的功能是建索引,这是提供快速查询的核心. 按照Solr学习之一所述关于搜索引擎的原理中说明了建 ...

  6. NLP点滴——文本相似度

    [TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...

  7. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  8. Solr系列一:Solr与Tomcat的整合

    第一次尝试着去写一个系列的教程,希望自己能坚持下去,也希望自己能够通过博客的编写来加深自己对solr搜索的理解. Solr与Tomcat的整合网上有很多教程,我就以我的整合为例来讲述一下我的整合过程, ...

  9. 文本相似度算法——空间向量模型的余弦算法和TF-IDF

    1.信息检索中的重要发明TF-IDF TF-IDF是一种统计方法,TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分 ...

随机推荐

  1. 备忘录模式-Memento Pattern

    1.主要优点 备忘录模式的主要优点如下: (1)它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原. (2) ...

  2. django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: '\xE5\xBE\x88\xE7\x81\xB5

    分析: 1.尝试在Python中对数据转码成utf8,'中文'.encode("utf-8"),还是报错 2.观察堆栈发现应该是操作mysql数据库的时候,将数据插入表里出错 所以 ...

  3. dojo:如何为表格添加从数据库获得存储的下拉框

    为表格添加下拉框的例子官网上就有,但如果下拉框的数据是从数据库请求的.需要有一些注意的地方. 首先希望实现的效果如下图所示: 表格初始数据为空,点击查询后获得表格表格数据,但下拉框的数据是在对应的fo ...

  4. 大数据框架hadoop服务角色介绍

    翻了一下最近一段时间写的分享,DKHadoop发行版本下载.安装.运行环境部署等相关内容几乎都已经写了一遍了.虽然有的地方可能写的不是很详细,个人理解水平有限还请见谅吧!我记得在写DKHadoop运行 ...

  5. RedHat6.5安装单机flume1.6

    版本号: RedHat6.5   JDK1.8   apache-flume-1.6.0 1.apache-flume-1.6.0-bin.tar.gz 下载 官网下载地址:http://archiv ...

  6. position 分层固定在屏幕某位置

    很多网站我们看到在屏幕右下角有一个,返回顶部,始终在那儿,还有些网站顶部菜单栏永远也是固定的不动,就是通过今天学习的position来做的. 在style中加入 positon:fixed;top 0 ...

  7. java统计文件字母大小写的数量练习

    import java.io.*; import java.lang.*; public class WordStatistic { private BufferedReader br; privat ...

  8. google使用的开源的工具类Thumbnailator图像处理

    maven依赖 <dependency>     <groupId>net.coobird</groupId>     <artifactId>thum ...

  9. WARNING: Package of target [javax.servlet.jsp.jstl.core.LoopTagSupport$1Status@7439e436] or package of member [public int javax.servlet.jsp.jstl.core.LoopTagSupport$1Status.getIndex()] are excluded!

    Struts2爆出045漏洞后,将struts版本升级到了2.3.32.但是在验证时发现有些jstl循环未出现预期的结果. debug发现,数据没有问题,断定是前端页面显示出了问题.根据日志信息WAR ...

  10. 写在vue总结之前(二)

    都说要快速学会一个技术(会使用),比如一个框架,在实际的工作中做相关的项目是最快的学习方式.而为什么在实际的工作项目中去学习是最快的方式?个人的体会是,在实际的工作项目中,很多功能的实现是你不得不做的 ...