在理想的情况下,搜索引擎只返回与用户查询相关的文档。而在现实的查询中,编辑(没发现更合适的表达)通常需要指定特定文档在搜索结果中的特定位置。这样做有很多原因。或许 “置顶” 的文档就是最好的查询结果。也可能是公司想让客户从相似的选择中找到利润率较高的产品。还可能是由第三方付费,提高某些查询词语的排名。不管是什么原因,对于一般的查询,要根据相关度来排名,让特定的文档出现在特定的位置,通常是很困难的(甚至是不可能的)。而且,即便搜索引擎能为某个查询达到这个目的,它也很可能会在这个过程中破坏其他 50 个查询。因此,现实中的搜索有这样一条基本规则:用户输入查询并不等于您必须搜索索引并给文档评级。我知道,以构建搜索引擎为生的人说这件事有点奇怪,但这是事实。您可以缓存普通的查询,或只查找结果(Solr 可以完成),或根据上述的某个原因 “硬编码” 结果。

Solr 使用一个神秘命名的 SearchComponent(即 QueryElevationComponent)实现了简单排名。为了在样例应用程序中配置它,我按清单 14 所示的方法声明它:

清单 14. 声明一个 QueryElevationComponent
 <searchComponent name="elevator"
class="org.apache.solr.handler.component.QueryElevationComponent"
>
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent>

queryFieldType属性指定如何将传入的查询与要提升的查询相匹配。为简单起见,string FieldType意味着查询必须是一个精确匹配的字符串,因为在 string FieldType上是不会执行任何分析的。config-file属性指定包含查询和相关联的结果的文件。它储存在一个单独的文件中,这样才能够从外部编辑它。文件必须位于 Solr 配置目录中或 Solr 数据目录中。如果它不在数据目录中,那么它会在 Solr 需要重新装载索引时再载入。

样例应用程序将 elevate.xml 储存在配置目录中。在它的内部,我为查询 “Charlotte” 添加了一个条目,以及其他 3 个条目,如清单 15 所示:

清单 15. 样例 elevate.xml 配置
 <query text="Solr">
<doc
id="http://lucene.grantingersoll.com/2008/06/21/solr-spell-checking-addition/"/>
<doc
<!-- Line break is for formatting purposes -->
id="http://lucene.grantingersoll.com/2008/10/01/\
charlotte-jug-%c2%bb-oct-15th-6pm-search-and-text-analysis/"
/>
<doc
id="http://lucene.grantingersoll.com/2008/08/27/solr-logo-contest/" exclude="true"/>
</query>

清单 15 表明第一个链接出现的位置应该高于第二个链接,而第三个链接必须排除在结果之外。此后的结果按正常的顺序排列。想要查看正常的结果(包含这个组件时,默认打开提升),运行以下查询:

http://localhost:8983/solr/rss/select/?q=Solr&version=2.2&start=0&rows=10&indent=on
&fl=link&enableElevation=false

想要查看提升打开时的结果,请尝试:

http://localhost:8983/solr/rss/select/?q=Solr&version=2.2&start=0&rows=10&indent=on
&fl=link&enableElevation=true

应该会看到插入的提升输出。

这就是编辑排序。现在您已经能够轻松地为搜索改变查询结果,而且不会损害其他结果的质量。

solr特点三: QueryElevation(编辑结果排序)的更多相关文章

  1. solr特点三: defType(查询权重排序)

    Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...

  2. solr特点三: 基于Solr实现排序定制化参考

    排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说 ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

  5. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  6. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  7. C语言 · 三个整数的排序

    算法提高 三个整数的排序   时间限制:1.0s   内存限制:256.0MB      问题描述 输入三个数,比较其大小,并从大到小输出. 输入格式 一行三个整数. 输出格式 一行三个整数,从大到小 ...

  8. ionic listview对象的编辑、排序和删除

    1)ionic的listview对象即<ion-list></ion-list> 2)添加并显示编辑按钮(添加其他自定义按钮也一样) can-swipe属性设置为true(默认 ...

  9. GrideView(三)---编辑功能实现

    GrideView(三)---编辑 法一.(优势:操作数据更加灵活:劣势: 书写较多代码,开发效率低) 通过编辑列---添加超链接(HyperlinkField)字段 ,来跳转页面实现编辑操作: 步骤 ...

随机推荐

  1. phpstorm破解 IntelliJ IDEA License Server本地搭建教程 http://blog.lanyus.com/archives/174.html/comment-page-6#comments 附件:mac环境

    ilanyu's Blog 搜索关键字搜索 首页IDEA注册码文件中转在线记事本老博客关于 IntelliJ IDEA License Server本地搭建教程 作者: ilanyu 时间: Marc ...

  2. SSH: sshd dead but subsys locked

    问题: 查看SSH的状态时,提示错误如下: /etc/init.d/sshd status error: sshd dead but subsys locked 解决方法: sshd -d rm -r ...

  3. 安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法

    安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法 原创 2015年07月31日 ...

  4. MVC框架介绍

    第一,建立一个解决方案然后在该解决方案下面新建mvc空项目. 第二,下面先对该项目的一些文件进行介绍: MVC项目文件夹说明: 1.(App_Data):用来保存数据文件,比如XML文件等 2.(Ap ...

  5. java后端时间处理工具类,返回 "XXX 前" 的字符串

    转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...

  6. php遍历所有文件

    <?php function getdir($dir){ static $str = ''; if(is_file($dir)){ $str.=$dir.'<br>'; }else{ ...

  7. Linux下的终端快捷键

    今天才发现Linux下的终端有这么多好用的快捷键. Shift+Ctrl+T:新建标签页 Shift+Ctrl+W:关闭标签页 Ctrl+PageUp:前一标签页 Ctrl+PageDown:后一标签 ...

  8. 分享 - 普通程序员如何转向AI方向

    原作者:计算机的潜意识 原文链接,内容稍有改动,侵删 1. 目的2. AI领域简介3. 学习方法4. 学习路线 0) 领域了解1) 知识准备2) 机器学习3) 实践做项目4) 深度学习5) 继续机器学 ...

  9. Node.js究竟是什么?

    来源:https://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs#ibm-pcon   Node 旨在解决 ...

  10. for 续2

    --------siwuxie095             (二)skip=n 忽略(屏蔽.隐藏)文本前 N 行的内容. (N 必须大于 0,不能等于 0)     格式: FOR /F " ...