生活随笔
收集整理的這篇文章主要介紹了
solr 自定义 dismax查询方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、在solrconfig.xml中增加
Xml代碼??
<queryParser?name="imdismax"??????????class="com.szhtp.search.parse.IMDisMaxQParserPlugin"?/>??<requestHandler?name="imdismax"?class="solr.SearchHandler">??????????<lst?name="defaults">??????????????<str?name="defType">imdismax</str>??????????????????????????????<str?name="qf">keywords^3?question^2?answer^0.4</str>????????????????<str?name="pf">keywords^3?question^2?answer^0.4</str>????????????????<str?name="mm">2<-1?5<-2?6<90%</str>??????????????????????????????<str?name="fl">id,answer,score</str>??????????????????????????????<int?name="ps">100</int>????????????????<str?name="hl.fl">answer</str>??????????????????????????????<str?name="q.alt">*:*</str>????????????????<!--?每個snippet返回的最大字符數。默認是100.如果為0,那么該字段不會被fragmented且整個字段的值會被返回。大字段時不會這么做。??????????????這里的answer=<str?name="hl.fl">answer</str>????????????????-->??????????????<str?name="f.answer.hl.fragsize">50</str>????????????????<!--?instructs?Solr?to?return?the?field?itself?if?no?query?terms?are??????????????????found?-->????????????????????????????<str?name="f.answer.hl.alternateField">answer</str>????????????????<!--?這個是solr制定fragment算法的擴展點。gap是默認值。??????????????????regex是另一種選項,這種選項指明highlight的邊界由一個正則表達式確定。??????????????????這是一種非典型的高級選項。為了知道默認設置和fragmenters?(and?formatters)是如何配置的,??????????????????可以看看solrconfig.xml中的highlight段?-->??????????????<str?name="f.answer.hl.fragmenter">regex</str>????????????????<str?name="tie">0.1</str>??????????</lst>??????</requestHandler>??
?
2、創建類IMDisMaxQParserPlugin.java
Java代碼??
public?class?IMDisMaxQParserPlugin?extends?QParserPlugin??{??????public?static?String?NAME?=?"imdismax";????????public?void?init(NamedList?args)?{??????}????????public?QParser?createParser(String?qstr,?SolrParams?localParams,?SolrParams?params,?SolrQueryRequest?req)?{????????return?new?IMDisMaxQParser(qstr,?localParams,?params,?req);??????}??}??
?
3、創建類IMDisMaxQParser.java 可以在里面增加中文分詞
Java代碼??
public?class?IMDisMaxQParser?extends?DisMaxQParser??{??????public?IMDisMaxQParser(String?qstr,?SolrParams?localParams,??????????????SolrParams?params,?SolrQueryRequest?req)??????{??????????super(qstr,?localParams,?params,?req);????????????if?(null?==?this.qstr)??????????{??????????????return;??????????}????????????Analyzer?analyzer?=?req.getSchema().getQueryAnalyzer();????????????if?(null?==?analyzer)??????????{??????????????return;??????????}????????????StringBuilder?norm?=?new?StringBuilder();??????????try??????????{????????????????TokenStream?tokens?=?analyzer.reusableTokenStream("question",??????????????????????new?StringReader(this.qstr));??????????????tokens.reset();??????????????Token?token?=?tokens.next();??????????????while?(token?!=?null)??????????????{??????????????????norm.append(??????????????????????????new?String(token.termBuffer(),?0,?token.termLength()))??????????????????????????.append("?");??????????????????token?=?tokens.next();??????????????}??????????}??????????catch?(Exception?ex)??????????{??????????????????????}??????????if?(norm.length()?>?0)??????????????this.qstr?=?norm.toString();??????}??} ?
總結
以上是生活随笔為你收集整理的solr 自定义 dismax查询方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。