solr 自定义 dismax查询方式
1、在solrconfig.xml中增加
<queryParser name="imdismax"/><requestHandler name="imdismax" name="code">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 可以在里面增加中文分词
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 {//对question分词 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(); }}
?
1 楼 poppop_2000 2012-07-11 [b][/b][b][/b][b][/b][b][/b][b][/b][b][/b][b][/i][i][/i][i][/i][i][/u][u][/u][u][/u][u][/b]