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实现电商搜索排名打分,排序,可自定义打分规则
solr评分 solr自定义评分组件demo.zip
自定义的Solr 分词器,可以通过竖线"|"来分词,可以在博客http://blog.csdn.net/jiangchao858/article/details/68954044看到生成过程与使用步骤。
solr functionquery函数查询功能强大,但字符串函数比较缺乏,该示例是contain示例,表示值中包含传入的字符串即返回1 否则返回0,可用于solr查询中如果某个字段包含动态传入的值在排名优先。有其他查询排序需求...
NULL 博文链接:https://mozhenghua.iteye.com/blog/2275318
图解solr5.0.1 war包方式安装【原创】图解solr5.0.1 war包方式安装【原创】图解solr5.0.1 war包方式安装【原创】
Solr是一个开源搜索平台,用于构建搜索应用程序。Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,...
图解Solr5.3.1 war包方式安装
solr查询语法,solr常用查询语法汇总。
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...
Solr-SQL为Solr Cloud提供了SQL接口,开发人员可以通过JDBC协议在Solr Cloud上运行。同时,solr-sql是用于solr的Apache Calcite(见 http://calcite.apache.org)适配器。solr-sql 是用 Scala 编写的,它可以生成像 ...
使用Solr内置的Jetty服务器启动Solr (1)借助X Shell上传solr的安装包到/usr/local/目录下,使用 tar -zxvf命令进行解压. (2)使用内置的Jetty来启动Solr服务器只需要在example目录下,执行start.jar程序即可,...
solr创建索引并查询,希望能够帮助有需要的人。。。
2. Solr查询 3. Facet查询 4. Group查询 5. 高亮查询 6. Suggest查询 7. SolrJ 章节三:Solr高级(上) 1. Solr Cloud 2. 函数查询 3. 地理位置查询 4. JSON Facet 章节四:Solr高级(下) 1. 深度分页 2. Solr Join...
说明solr-5.3.1项目原始代码。实现自己定义的servlet和QueryParse实现上传词库到ik分词的词库文件中
使用mahout机器学习改进solr查询结果
使用java实现solr-7.1.0的api和solr最新支持的sql查询.使用java实现solr-7.1.0的api和solr最新支持的sql查询.