默认查询分析器
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<int name="rows">10</int>
<str name="defType">lucene</str>
</lst>
</requestHandler>
defType参数
defType参数选择 Solr 应该用来处理请求中的主查询参数(q)的查询解析器。
defType=lucene
defType=dismax
如果没有指定 defType 参数,则默认使用标准查询解析器(lucene)。
类QParserPlugin
QParserPlugin定义了defType参数的标准插件
LuceneQParserPlugin.class DisMaxQParserPlugin.class
QParserPlugin相关源码
/**
* Internal use - name to class mappings of builtin parsers.
* Each query parser plugin extending {@link QParserPlugin} has own instance of standardPlugins.
* This leads to cyclic dependencies of static fields and to case when NAME field is not yet initialized.
* This result to NPE during initialization.
* For every plugin, listed here, NAME field has to be final and static.
*/
public static final Object[] standardPlugins = {
LuceneQParserPlugin.NAME, LuceneQParserPlugin.class,
OldLuceneQParserPlugin.NAME, OldLuceneQParserPlugin.class,
FunctionQParserPlugin.NAME, FunctionQParserPlugin.class,
PrefixQParserPlugin.NAME, PrefixQParserPlugin.class,
BoostQParserPlugin.NAME, BoostQParserPlugin.class,
DisMaxQParserPlugin.NAME, DisMaxQParserPlugin.class,
ExtendedDismaxQParserPlugin.NAME, ExtendedDismaxQParserPlugin.class,
FieldQParserPlugin.NAME, FieldQParserPlugin.class,
RawQParserPlugin.NAME, RawQParserPlugin.class,
TermQParserPlugin.NAME, TermQParserPlugin.class,
NestedQParserPlugin.NAME, NestedQParserPlugin.class,
FunctionRangeQParserPlugin.NAME, FunctionRangeQParserPlugin.class,
SpatialFilterQParserPlugin.NAME, SpatialFilterQParserPlugin.class,
SpatialBoxQParserPlugin.NAME, SpatialBoxQParserPlugin.class,
JoinQParserPlugin.NAME, JoinQParserPlugin.class,
SurroundQParserPlugin.NAME, SurroundQParserPlugin.class,
SwitchQParserPlugin.NAME, SwitchQParserPlugin.class,
MaxScoreQParserPlugin.NAME, MaxScoreQParserPlugin.class,
BlockJoinParentQParserPlugin.NAME, BlockJoinParentQParserPlugin.class,
BlockJoinChildQParserPlugin.NAME, BlockJoinChildQParserPlugin.class,
CollapsingQParserPlugin.NAME, CollapsingQParserPlugin.class,
SimpleQParserPlugin.NAME, SimpleQParserPlugin.class
};
LuceneQParserPlugin.class和DisMaxQParserPlugin.class相关源码
public class LuceneQParserPlugin extends QParserPlugin {
public static final String NAME = "lucene";
@Override
public void init(NamedList args) {
}
@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new LuceneQParser(qstr, localParams, params, req);
}
}
public class DisMaxQParserPlugin extends QParserPlugin {
public static final String NAME = "dismax";
@Override
public void init(NamedList args) {
}
@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new DisMaxQParser(qstr, localParams, params, req);
}
}
可见编写自定义查询分析器要继承QParserPlugin类
编写自定义查询分析器
模仿LuceneQParserPlugin.class写个测试用,和LuceneQParserPlugin.class的查询解析功能一致
public class MyLuceneQParserPlugin extends QParserPlugin {
public static final String NAME = "mylucene";
@Override
public void init(NamedList args) {
}
@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new MyLuceneQParser(qstr, localParams, params, req);
}
class MyLuceneQParser extends QParser {
SolrQueryParser lparser;
public MyLuceneQParser(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
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<queryParser name="mylucene" class="cn.chy.plugin.MyLuceneQParserPlugin" />
....省略....
<requestHandler name="/myquery" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="defType">mylucene</str>
<str name="echoParams">explicit</str>
<int name="rows">10</int>
</lst>
</requestHandler>
</config>
lib目录
solr默认加载core目录中lib目录中的jar包,将jar包放到lib目录即可