Solr QueryElevationComponent--实现竞价排名

在很多搜索网站上都有这样的一个功能,就是竞价排名,绑定某个关键字,给钱了那我给你排前面。

包括很多视频网站的一些站内搜索功能也有这样的需求;

最近在看solr官网,solr的查询功能中就包含了这一功能。参考地址如下:

https://wiki.apache.org/solr/QueryElevationComponent#elevateIds.2FexcludeIds

下面这个网址包含了solr所有功能;对solr感兴趣的可以收藏下!

https://cwiki.apache.org/confluence/display/solr/Spell+Checking

那么接下来我们来实现我们的功能把。

solrconfig.xml

[html]  view plain  copy
  1. <searchComponent name="elevator"  
  2.     class="org.apache.solr.handler.component.QueryElevationComponent">  
  3.     <!-- pick a fieldType to analyze queries -->  
  4.     <str name="queryFieldType">string</str>  
  5.     <str name="config-file">elevate.xml</str>  
  6. </searchComponent>  
  7.   
  8. <!-- A request handler for demonstrating the elevator component -->  
  9. <requestHandler name="/elevate"  
  10.     class="org.apache.solr.handler.component.SearchHandler" startup="lazy">  
  11.     <lst name="defaults">  
  12.         <str name="echoParams">explicit</str>  
  13.         <!-- <str name="df">text</str> -->  
  14.     </lst>  
  15.     <arr name="last-components">  
  16.         <str>elevator</str>  
  17.     </arr>  
  18. </requestHandler>  

config-file:elevate.xml,这个文件solr默认已经存在,需要自己配置;默认跟solrconfig.xml同一目录,如无特殊要求可不做修改

searchComponent的name属性是和requestHandler有一个绑定关系的,大家注意一下;

还有就是,requestHandler定义的名称/elevate是我们后面需要用到的节点名,就像selelct一样。使用这一功能的时候把select换成elevate。
requestHandler标签中的defaults-->df是定义了你要做竞价排名,或者说人工干预的查询字段;如果此处不指定的话,需要在查询的时候指定;


[html]  view plain  copy
  1. <elevate>  
  2.  <query text="isle">  
  3.    <doc id="6493" />  <!-- put the actual ipod at the top -->  
  4.    <doc id="3971" exclude="true" /> <!-- exclude this cable -->  
  5.  </query>  
  6. </elevate>  
以上是一个简单的示例,当用户查询isle时,docID为6493的文档会被提到最前。而这里的docID为3971的文档将会被提出到查询的结果之外,因为配置了exclude属性为true。

如果不配置默认为false,即不排除!

接下来我们查询下看看。这里先看下正常的查询结果。这里我们把enableElevation设置为false即可

[html]  view plain  copy
  1. <response>  
  2.     <lst name="responseHeader">  
  3.         <int name="status">0</int>  
  4.         <int name="QTime">1</int>  
  5.         <lst name="params">  
  6.             <str name="enableElevation">false</str>  
  7.             <str name="df">name</str>  
  8.             <str name="q">isle</str>  
  9.             <str name="forceElevation">true</str>  
  10.         </lst>  
  11.     </lst>  
  12.     <result name="response" numFound="6" start="0">  
  13.         <doc>  
  14.             <str name="id">302</str>  
  15.             <str name="name">The Isle</str>  
  16.             <str name="year">2001</str>  
  17.             <long name="_version_">1480190152307376130</long>  
  18.         </doc>  
  19.         <doc>  
  20.             <str name="id">2</str>  
  21.             <str name="name">Isle of Man TT 2004 Review</str>  
  22.             <str name="year">2004</str>  
  23.             <long name="_version_">1480190152202518528</long>  
  24.         </doc>  
  25.         <doc>  
  26.             <str name="id">6493</str>  
  27.             <str name="name">Val Lewton: Isle of the Dead / Bedlam</str>  
  28.             <str name="year">1945</str>  
  29.             <long name="_version_">1480190153170354189</long>  
  30.         </doc>  
  31.         <doc>  
  32.             <str name="id">3871</str>  
  33.             <str name="name">The Who: Live at the Isle of Wight Festival</str>  
  34.             <str name="year">1970</str>  
  35.             <long name="_version_">1480190152951201796</long>  
  36.         </doc>  
  37.         <doc>  
  38.             <str name="id">9409</str>  
  39.             <str name="name">Isle of Wight Festival: Message to Love: 1970</str>  
  40.             <str name="year">1970</str>  
  41.             <long name="_version_">1480190153367486468</long>  
  42.         </doc>  
  43.         <doc>  
  44.             <str name="id">13617</str>  
  45.             <str name="name">  
  46.                 Jethro Tull: Nothing Is Easy: Live at the Isle of Wight 1970  
  47.             </str>  
  48.             <str name="year">2005</str>  
  49.             <long name="_version_">1480190153579298828</long>  
  50.         </doc>  
  51.     </result>  
  52. </response>  

接下来我们把enableElevation设置为true,查询做下对比

http://localhost:8081/solr/collection1/elevate?q=isle&enableElevation=true&forceElevation=true

查询结果如下:’

[html]  view plain  copy
  1. <response>  
  2.     <lst name="responseHeader">  
  3.         <int name="status">0</int>  
  4.         <int name="QTime">18</int>  
  5.         <lst name="params">  
  6.             <str name="enableElevation">true</str>  
  7.             <str name="df">name</str>  
  8.             <str name="q">isle</str>  
  9.             <str name="forceElevation">true</str>  
  10.         </lst>  
  11.     </lst>  
  12.     <result name="response" numFound="6" start="0">  
  13.         <doc>  
  14.             <str name="id">6493</str>  
  15.             <str name="name">Val Lewton: Isle of the Dead / Bedlam</str>   
  16.             <str name="year">1945</str>  
  17.             <long name="_version_">1480190153170354189</long>  
  18.         </doc>  
  19.         <doc>  
  20.             <str name="id">302</str>  
  21.             <str name="name">The Isle</str>  
  22.             <str name="year">2001</str>  
  23.             <long name="_version_">1480190152307376130</long>  
  24.         </doc>  
  25.         <doc>  
  26.             <str name="id">2</str>  
  27.             <str name="name">Isle of Man TT 2004 Review</str>  
  28.             <str name="year">2004</str>  
  29.             <long name="_version_">1480190152202518528</long>  
  30.         </doc>  
  31.         <doc>  
  32.             <str name="id">3871</str>  
  33.             <str name="name">The Who: Live at the Isle of Wight Festival</str>  
  34.             <str name="year">1970</str>  
  35.             <long name="_version_">1480190152951201796</long>  
  36.         </doc>  
  37.         <doc>  
  38.             <str name="id">9409</str>  
  39.             <str name="name">Isle of Wight Festival: Message to Love: 1970</str>  
  40.             <str name="year">1970</str>  
  41.             <long name="_version_">1480190153367486468</long>  
  42.         </doc>  
  43.         <doc>  
  44.             <str name="id">13617</str>  
  45.             <str name="name">  
  46.                 Jethro Tull: Nothing Is Easy: Live at the Isle of Wight 1970  
  47.             </str>  
  48.             <str name="year">2005</str>  
  49.             <long name="_version_">1480190153579298828</long>  
  50.         </doc>  
  51.     </result>  
  52. </response>  
可以看到docID为6493的文档被提到最前。而docID为3971的文档被剔除结果集。
posted @ 2017-11-24 11:02  車輪の唄  阅读(11)  评论(0编辑  收藏  举报  来源