solr特点三: boost(改变默认打分排序)
实现方法有3个:
- 在建索引的时候设置boost,这个值会写入文件,建索引时有额外的性能开销;
- 在查询的时候指定boost,这个值不会写入文件,查询时指定任意字段的boost值,适用与一个索引库的多种查询场景,但查询时有额外性能开销;
- (推想)前两者结合使用,如绝大多数都需要标题优先,那么建索引时可指定标题boost为2,其他场景可在查询时指定标题boost为0.5,中和建索引时的设置。
这里仅演示第二种方法:
| id | title | content | 默认得分 | 指定标题boost值为2后得分 |
| 108 | test | 开发笔记 开发笔记 开发笔记 开发笔记 开发笔记 | 1.6093808 | 1.0178617 |
| 107 | 开发笔记 | 1.439474 | 1.8208065 |
指定方法:
这时doc 107已经排在上边了:
debug query效果:
找到了方法,我们不难获得在solrj中的实现:
package demo.service; import java.util.Iterator; import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList; import base.util.ConfigUtil; public class SolrService {
private static Logger log = Logger.getLogger(SolrService.class); private static HttpSolrServer solrServer; static {
solrServer = new HttpSolrServer(ConfigUtil.getValue("solr.url"));
solrServer.setConnectionTimeout(5000);
}
public static void main(String[] args) {
SolrQuery query = new SolrQuery();
query.setQuery("title: 开发笔记^2 OR content:开发笔记");
QueryResponse rsp = null;
try {
rsp = solrServer.query(query);
} catch (SolrServerException e) {
log.error("Boost查询时遇到错误:", e);
}
SolrDocumentList docs = rsp.getResults(); Iterator<SolrDocument> iter = docs.iterator();
while (iter.hasNext()) {
SolrDocument doc = iter.next();
String idStr = doc.getFieldValue("id").toString();
int id = Integer.parseInt(idStr);
String title = doc.getFieldValue("title").toString();
String content = doc.getFieldValue("content").toString();
System.out.println("id:"+id+" title:"+title+" content:"+content);
}
}
}
注:因为我们想设置的boost针对某字段,那么在查询在时候就不能再用拷贝字段了。
其实还有一个使用拷贝字段也能排序的方法,供大家参考:
solr特点三: boost(改变默认打分排序)的更多相关文章
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[2]--DIH
转载:http://quweiprotoss.wap.blog.163.com/w2/ DIH需要在solrconfig.xml中注册,如下: <requestHandler name=&quo ...
- eclipse中maven插件,改变默认仓库位置
一.eclipse中maven默认仓库是当前用户下.m2/repository,需改变默认路径按照下面步骤. 步骤一:安装maven 下载:http://maven.apache.org/ 配置mav ...
- docker改变默认存储路径到数据盘(自己实践)
一.首先将数据盘格式化分区并挂载(文章中提到的sdb(腾讯云)实践中是vdb(阿里云),文章中挂载在ssd目录下,实践中是挂载到data目录下的,后面安装docker部分以后是实践中的记录,上面数据盘 ...
- java提供的默认list排序方法-转
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- [转帖]从 2G 到 5G,手机上网话语权的三次改变
从 2G 到 5G,手机上网话语权的三次改变 美国第一大电信运营商 Verizon 公司的 CEO Hans Vestberg 手持一部 iPad,屏幕上显示俯瞰地面的飞行地图.400 多公里外的洛杉 ...
- 使用事件的preventDefault()方法改变默认行为
事件有属性,还有方法,还有事件.事件本身是个对象^_^ 事件的preventDefault()方法改变默认行为,在事件发生前阻止,不让其发生.这样的应用场景有很多,常见表单验证,如必填字段不能为空. ...
- 20162327WJH第三次实验——查找与排序2
20162327WJH第三次实验--查找与排序2 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 王旌含 学号:20162327 成绩: 指导教师:娄嘉鹏 王志强 实验日期:11月 ...
随机推荐
- 利用spring的CommonsMultipartResolver上传文件
1.CommonsMultipartResolver是spring里面提供的一个上传方式,效率我不知道,但是加入spring容器管理还是很不错的. 2.先看依赖包pom.xml <project ...
- Repeater使用技巧
一.在ItemDataBound事件里面动态改变Repeater控件里面的html元素 如: <asp:Repeater ID="Repeater1" runat=" ...
- ffmpeg重要的参考学习网址
http://lib.csdn.net/liveplay/knowledge/1586 FFmpeg滤镜使用指南 http://blog.csdn.net/fireroll/article/detai ...
- MongoDB 生态 – 可视化管理工具
工欲善其事,必先利其器,我们在使用数据库时,通常需要各种工具的支持来提高效率:很多新用户在刚接触 MongoDB 时,遇到的问题是『不知道有哪些现成的工具可以使用』,本系列文章将主要介绍 MongoD ...
- 1_boostrap概述
1.bootstrap概述 1.1.什么是bootstrap?bootstrap的作用? Bootstrap,基于 HTML.CSS.JAVASCRIPT 的前端框架. 该框架已经预定义了一套CSS样 ...
- leetcode119
public class Solution { public IList<int> GetRow(int rowIndex) { List<List<int>> l ...
- delphi 实体类 JSON 数组
delphi 实体类 与JSON转换,序列化 TJson REST.JSON.pas TJson.JsonToObjectTJson.ObjectToJsonString JsonEncode O ...
- http://www.5xcg.com/bbs/forum.php?mod=viewthread&tid=51143&extra=page%3D1
http://www.5xcg.com/bbs/forum.php?mod=viewthread&tid=51143&extra=page%3D1 因为身在酒店设备有限,只能尽量把文字 ...
- .net core 下的一个docker hello world
接触 docker 有段时间了,发现docker这个东西,真是越用越爽. 那就从零开始跑一个 docker simple . 方法一: 步骤一: dotnet new mvc --name myweb ...
- dsm 黑 离线转码 备忘
6.2以后不行 我用的是 DS3617_6.17-15284 进入下载安装文件和工具 1安装 .套件来源增加 packages.synocommunity.comb.设置信任级别为任何发行者 c.找到 ...