1、在solrconfig.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
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();
}
}
分享到:
相关推荐
- Solr支持丰富的查询语法,如Lucene Query Parser语法、DisMax查询解析器等。 - 可以自定义排序规则,根据相关性、时间或其他字段值进行结果排序。 6. **高级特性** - ** faceting(聚类)**:允许用户按类别...
- **查询语法**:Solr支持多种查询语法,如Lucene查询语法、DisMax查询解析器、edismax查询解析器等。 - **高亮显示**:Solr可以高亮显示搜索结果中的匹配部分,提高用户体验。 - **排序与评分**:Solr可以根据...
1. **Query Syntax**:Solr支持多种查询语法,包括标准查询解析器(QParser)、Lucene查询语法(LQ)和DisMax查询解析器。 2. **Faceting**:提供分类统计,帮助用户快速了解搜索结果的分布情况。 3. **Highlighting...
- **查询解析**:利用Solr的DisMax Query Parser等工具,增强查询解析能力,提升用户体验。 - **结果排序与过滤**:提供灵活的排序选项,如按日期、相关性或自定义字段排序,同时支持复杂的过滤条件。 #### 4. 高级...
- **高级查询语法**: 介绍 Solr 的 QueryParser 和 DisMax 查询解析器,以及如何使用它们来构建复杂的查询。 - **结果排序与分组**: 掌握排序和分组查询结果的方法,以及如何实现自定义排序策略。 4. **性能调优**...
Solr的查询能力强大且灵活,支持多种查询语法,包括标准查询解析器(Standard Query Parser)、简写查询解析器(DisMax Query Parser)等。此外,Solr还支持自定义查询解析器和过滤器,以满足特定的查询需求。用户...
- **Query Parsers**:允许自定义查询解析器,如 DisMax QParser 和 Function QParsers,支持多种查询类型和功能查询。 - **Text Analysis**:分析器、分词器和过滤器插件用于处理文本输入,如 Whitespace ...
6. **查询和分析功能**:Solr提供了丰富的查询语法,如Lucene Query Parser (LQP)、DisMax、EDisMax等,以及高级的查询和过滤选项。同时,Solr还支持实时添加、删除和更新文档,提供实时搜索能力。 7. **XML 和 ...
8. **查询和结果处理(Query and Result Handling)**:Solr 提供了丰富的查询语法(如 Lucene 查询语法和 DisMax 请求处理器),并支持对搜索结果进行排序、高亮显示、分页等操作。 9. **Faceting(分类浏览)**:...
- **查询API**:Solr提供了丰富的查询语言(如Lucene Query Parser、DisMax和edismax),支持布尔运算、通配符、范围查询等。 - **高亮显示**:突出显示查询结果中的匹配部分,增强用户体验。 - **排序**:根据...
4. **查询与搜索**:学习Solr的查询语法,如使用Lucene Query Parser、DisMax查询解析器,以及如何构造复杂的查询表达式,如布尔运算符、短语匹配、范围查询等。 5. **结果排序与评分**:理解如何自定义排序规则,...