你好,游客 登录 注册 搜索
背景:
阅读新闻

Solr实现Low Level查询解析(QParser)

[日期:2012-05-05] 来源:Linux社区  作者:shirdrn [字体: ]

接下来,QParser的plugin只需要使用上面实现SimpleQParser,非常容易,如下所示:

  1. package org.shirdrn.solr.search;  
  2.   
  3. import org.apache.solr.common.params.SolrParams;  
  4. import org.apache.solr.common.util.NamedList;  
  5. import org.apache.solr.request.SolrQueryRequest;  
  6. import org.apache.solr.search.QParser;  
  7. import org.apache.solr.search.QParserPlugin;  
  8.   
  9. /** 
  10.  *  
  11.  * Simple query parser plugin. 
  12.  * e.g. search "Tokyo AND food" 
  13.  *  
  14.  * @author shirdrn 
  15.  * @date   2011-11-03 
  16.  */  
  17. public class SimpleQParserPlugin extends QParserPlugin {  
  18.     @SuppressWarnings("rawtypes")  
  19.     @Override  
  20.     public void init(NamedList args) {  
  21.     }  
  22.   
  23.     @Override  
  24.     public QParser createParser(String qstr, SolrParams localParams,  
  25.             SolrParams params, SolrQueryRequest req) {  
  26.         return new  SimpleQParser(qstr, localParams,params, req);  
  27.     }     
  28. }  
最后,在Solr的solrconfig.xml中配置好对应的requestHandler即可,配置片段示例如下所示:
  1. <queryParser name="simple" class="org.shirdrn.solr.search.SimpleQParserPlugin" />  
  2. <requestHandler name="/simple" class="solr.SearchHandler">  
  3.       <lst name="defaults">  
  4.               <str name="defType">simple</str>  
  5.               <str name="qf">title^1.5 content</str>  
  6.   
  7.               <str name="bf">recip(ms(NOW,publishDate),3.16e-13,1,1)^1.68</str>  
  8.   
  9.               <str name="mainBoost">1.555</str>  
  10.               <str name="frontBoost">1.333</str>  
  11.               <str name="rearBoost">1.222</str>  
  12.   
  13.               <str name="fl">*,score</str>  
  14.               <str name="qt">standard</str>  
  15.               <str name="wt">standard</str>  
  16.               <str name="version">2.2</str>  
  17.               <str name="echoParams">explicit</str>  
  18.               <bool name="hl">true</bool>  
  19.               <str name="hl.fl">title content</str>  
  20.               <int name="hl.snippets">3</int>  
  21.   
  22.               <str name="indent">true</str>  
  23.               <str name="debugQuery">on</str>  
  24.               <str name="explainOther">on</str>  
  25.       </lst>  
  26. </requestHandler>  
下面,启动Solr搜索服务器,通过搜索:
  1. http://192.168.0.181:8080/solr/core/simple/?q=北京OR北平OR首都OR京城OR京都AND首都博物馆OR首博&start=0&rows=10  

就能达到我们的目的,搜索结果的xml格式响应,如下所示:

  1. <result name="response" numFound="710" start="0" maxScore="2.5198267">  
  2. ... ...  
  3. <lst name="debug">  
  4. <str name="rawquerystring">北京OR北平OR首都OR京城OR京都AND首都博物馆OR首博</str>  
  5. <str name="querystring">北京OR北平OR首都OR京城OR京都AND首都博物馆OR首博</str>  
  6. <str name="parsedquery">  
  7. +((+((content:北京 title:北京^1.5 content:北平 title:北平^1.5 content:首都 title:首都^1.5 content:京城 title:京城^1.5 content:京都 title:京都^1.5)^1.333) +((content:首都博物馆 title:首都博物馆^1.5 content:首博 title:首博^1.5)^1.222))^1.555) FunctionQuery(1.0/(3.16E-13*float(ms(const(1320330543420),date(publishDate)))+1.0))  
  8. </str>  
  9. <str name="parsedquery_toString">  
  10. +((+((content:北京 title:北京^1.5 content:北平 title:北平^1.5 content:首都 title:首都^1.5 content:京城 title:京城^1.5 content:京都 title:京都^1.5)^1.333) +((content:首都博物馆 title:首都博物馆^1.5 content:首博 title:首博^1.5)^1.222))^1.555) 1.0/(3.16E-13*float(ms(const(1320330543420),date(publishDate)))+1.0)  
  11. </str>  
另外,如必要的时候,还可以扩展SolrDispatcherFilter,对HTTP请求参数进行精细地控制,实现更灵活的请求搜索方式。 linux
相关资讯       Solr 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款