Solr QueryParse扩展
来源:互联网 发布:电子商务网络安全问题 编辑:程序博客网 时间:2024/05/19 20:48
默认情况下,Solr查询语法只有两种形式:关键词或者以空格分隔的关键词组。当查询英文时,英文本身就是以空格来区分词的,所以Solr就能直接获取英文词并组装Query;但是中文句子中间没有空格,Solr查询时把整个句子交给Query,然后由Query再按照Field来分词、查询。这样就丧失了DisMax中qf所能带来的好处。
如果能够在用户输入之后,传入DisMax和QueryComponent之前,把中文句子分割为:关键词+空格+关键词,就能享受Solr中的所有好处。分析DisMaxQParserPlugin和DisMaxQParser的实现,在DisMaxQParser中能够获得默认查询字段和分析器,假如默认查询字段是中文类型,那么就可以通过默认字段和分析器对中文句子拆词了。
具体实现:
如果能够在用户输入之后,传入DisMax和QueryComponent之前,把中文句子分割为:关键词+空格+关键词,就能享受Solr中的所有好处。分析DisMaxQParserPlugin和DisMaxQParser的实现,在DisMaxQParser中能够获得默认查询字段和分析器,假如默认查询字段是中文类型,那么就可以通过默认字段和分析器对中文句子拆词了。
具体实现:
Solr wiki上讲得不错(http://wiki.apache.org/solr/SolrPlugins),但不具体实践一下总是有些模糊。
写自己的类,继承自QParserPlugin,主要实现parse()方法
public class MyQueryParser extends QParserPlugin { public static final String NAME = "myParser"; @Override public void init(NamedList args) {} @Override public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { return new MyQParser(qstr, localParams, params, req); } public class MyQParser extends QParser { SolrQueryParser lparser; public MyQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { super(qstr, localParams, params, req); } @Override public Query parse() throws SyntaxError { String qstr = getString(); if (qstr == null || qstr.length()==0) return null; String defaultField = getParam(CommonParams.DF); if (defaultField==null) { defaultField = getReq().getSchema().getDefaultSearchFieldName(); } //随便写点什么 lparser = new SolrQueryParser(this, defaultField); lparser.setDefaultOperator (QueryParsing.getQueryParserDefaultOperator(getReq().getSchema(), getParam(QueryParsing.OP))); return lparser.parse(qstr); } @Override public String[] getDefaultHighlightFields() { return lparser == null ? new String[]{} : new String[]{lparser.getDefaultField()}; } } }
在solrconfig.xml中注册queryParser
<queryParser name="myParser" class="org.apache.solr.parser.MyQParserPlugin"/>
将这个parser设置为默认的parser
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="defType">myParser</str> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="df">text</str> </lst></requestHandler>修改了示例中”/select”的配置,可以做到长期透明地使用这个自定义的Parser
0 0
- Solr QueryParse扩展
- 扩展 Solr
- Scaling Solr(Solr的扩展)
- Scaling Solr(Solr的扩展)
- Scaling Solr(Solr的扩展)
- Lucene——QueryParse搜索
- solr索引目录与扩展
- solr索引目录与扩展
- solr的扩展(2)
- [solr] - IKAnalyzer 扩展分词库
- [solr] - IKAnalyzer 扩展分词库
- Solr 扩展:TOMCAT配置数据源
- solr newSearcher 跟 firstSearcher的监听器扩展
- solr 扩展中文分词 IKAnalyzer 配置文件路径
- ubuntu下安装 php的solr扩展
- solr扩展自己的analyzer的tokenfilter
- [搜索] Solr 扩展:TOMCAT配置数据源
- win7下php5.5安装solr扩展
- 【转载】CSS 的优先级机制[总结]
- GoldenGate
- POJ 1125--Stockbroker Grapevine【多源最短路】
- 优秀博主博文汇总
- 数组下标的排序
- Solr QueryParse扩展
- iGrimace1.44基本使用方式
- Xcode6调不出TextField的键盘
- 用vbs等实现辅助网站的后台运行工作进程(二)
- Linux Top 命令解析
- Android平台下的JNI开发
- 【学习笔记】系列六:nmon分析文件各sheet含义
- 新手向——关于Python3.5在Windows 10 系统下发布模块的终极讲解
- php学习基础篇之对HTML页面里标签代码含义的讲解