默認查詢分析器
<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目錄即可