zoukankan      html  css  js  c++  java
  • solr特点三: QueryElevation(编辑结果排序)

    在理想的情况下,搜索引擎只返回与用户查询相关的文档。而在现实的查询中,编辑(没发现更合适的表达)通常需要指定特定文档在搜索结果中的特定位置。这样做有很多原因。或许 “置顶” 的文档就是最好的查询结果。也可能是公司想让客户从相似的选择中找到利润率较高的产品。还可能是由第三方付费,提高某些查询词语的排名。不管是什么原因,对于一般的查询,要根据相关度来排名,让特定的文档出现在特定的位置,通常是很困难的(甚至是不可能的)。而且,即便搜索引擎能为某个查询达到这个目的,它也很可能会在这个过程中破坏其他 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

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

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

  • 相关阅读:
    博客园Js设置
    springboot练习笔记
    相关的其他文件
    设计模式之----代理模式
    JSP的四种范围
    io流读写及相关内容
    缓存
    gson解析json
    Android简单获得通讯录
    android服务之一 Service
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/5435dgdfg.html
Copyright © 2011-2022 走看看