solr 自定义 dismax查询方式
http://13shu.iteye.com/blog/754742
2010 - 09 - 03
solr 自定义 dismax查询方式 博客分类: solr
Solr 正则表达式 算法 XML F#
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 > <!-- 设置PhraseSlop的坡度 --> < 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 -- > <!-- 如果没有生成snippet(没有terms 匹配),那么使用另一个字段值作为返回 --> < 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 { //对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(); } }
solr 数据源导入需要注意的问题 dataimpor ... | solr 查询解析流程
17:13 评论 / 浏览 (0 / 415) 分类: 企业架构 相关推荐
评论
发表评论表情图标
字体颜色: 字体大小: 对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
您还没有登录,请 登录 后发表评论(快捷键
查看更多关于solr 自定义 dismax查询方式的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did42971