1、在solrconfig.xml中增加

Xml代码  
  1. <queryParser name="imdismax"
  2. class="com.szhtp.search.parse.IMDisMaxQParserPlugin" />
  3. <requestHandler name="imdismax" class="solr.SearchHandler">
  4. <lst name="defaults">
  5. <str name="defType">imdismax</str>
  6. <!-- 查询关键字和设置权重 -->
  7. <str name="qf">keywords^3 question^2 answer^0.4</str>
  8. <str name="pf">keywords^3 question^2 answer^0.4</str>
  9. <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
  10. <!-- 输出时显示那些字段 -->
  11. <str name="fl">id,answer,score</str>
  12. <!-- 设置PhraseSlop的坡度 -->
  13. <int name="ps">100</int>
  14. <str name="hl.fl">answer</str>
  15. <!-- 默认查询语句用于容错处理 -->
  16. <str name="q.alt">*:*</str>
  17. <!-- 每个snippet返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。大字段时不会这么做。
  18. 这里的answer=<str name="hl.fl">answer</str>
  19. -->
  20. <str name="f.answer.hl.fragsize">50</str>
  21. <!-- instructs Solr to return the field itself if no query terms are
  22. found -->
  23. <!-- 如果没有生成snippet(没有terms 匹配),那么使用另一个字段值作为返回 -->
  24. <str name="f.answer.hl.alternateField">answer</str>
  25. <!-- 这个是solr制定fragment算法的扩展点。gap是默认值。
  26. regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。
  27. 这是一种非典型的高级选项。为了知道默认设置和fragmenters (and formatters)是如何配置的,
  28. 可以看看solrconfig.xml中的highlight段 -->
  29. <str name="f.answer.hl.fragmenter">regex</str>
  30. <str name="tie">0.1</str>
  31. </lst>
  32. </requestHandler>

2、创建类IMDisMaxQParserPlugin.java

Java代码  
  1. public class IMDisMaxQParserPlugin extends QParserPlugin
  2. {
  3. public static String NAME = "imdismax";
  4. public void init(NamedList args) {
  5. }
  6. public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
  7. return new IMDisMaxQParser(qstr, localParams, params, req);
  8. }
  9. }

3、创建类IMDisMaxQParser.java 可以在里面增加中文分词

Java代码  
  1. public class IMDisMaxQParser extends DisMaxQParser
  2. {
  3. public IMDisMaxQParser(String qstr, SolrParams localParams,
  4. SolrParams params, SolrQueryRequest req)
  5. {
  6. super(qstr, localParams, params, req);
  7. if (null == this.qstr)
  8. {
  9. return;
  10. }
  11. Analyzer analyzer = req.getSchema().getQueryAnalyzer();
  12. if (null == analyzer)
  13. {
  14. return;
  15. }
  16. StringBuilder norm = new StringBuilder();
  17. try
  18. {
  19. //对question分词
  20. TokenStream tokens = analyzer.reusableTokenStream("question",
  21. new StringReader(this.qstr));
  22. tokens.reset();
  23. Token token = tokens.next();
  24. while (token != null)
  25. {
  26. norm.append(
  27. new String(token.termBuffer(), 0, token.termLength()))
  28. .append(" ");
  29. token = tokens.next();
  30. }
  31. }
  32. catch (Exception ex)
  33. {
  34. }
  35. if (norm.length() > 0)
  36. this.qstr = norm.toString();
  37. }
  38. }

solr 自定义 dismax查询方式相关推荐

  1. Solr的函数查询(FunctionQuery)

    作用 通过函数查询让我们可以利用 numeric域的值或者与域相关的的某个特定的值的函数,来对文档进行评分. 如何使用 这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接口的 ...

  2. 标准查询分析器:Solr的默认查询解析器也称为“Lucene”解析器。

    标准查询分析器:Solr的默认查询解析器也称为"Lucene"解析器. 标准查询解析器的主要优点是,它支持一种健壮且相当直观的语法,允许您创建各种结构化查询.最大的缺点是,与设计为 ...

  3. jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一.  诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...

  4. Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)

    摘要: Solr除了支持常见的解析器之外,还有一些特殊用途的解析器,为了便于之后查阅,总结一下.本文整理自Solr官方文档. 解析器 说明 Standard Query Parser Solr的标准查 ...

  5. IBatis.Net学习笔记五--常用的查询方式

    在项目开发过程中,查询占了很大的一个比重,一个框架的好坏也很多程度上取决于查询的灵活性和效率. 在IBatis.Net中提供了方便的数据库查询方式.在Dao代码部分主要有两种方式: 1.查询结果为一个 ...

  6. Solr学习笔记——查询

    1.进入Solr管理界面http://localhost:8983/solr/ 可以看到Query中有若干的参数,其意义如下(参考:http://www.jianshu.com/p/3c4cae5de ...

  7. Spring Data Solr教程:查询方法

    我们已经了解了如何配置Spring Data Solr. 我们还学习了如何向Solr索引添加新文档,如何更新现有文档的信息以及从Solr索引删除文档. 现在是时候继续前进,学习如何使用Spring D ...

  8. jeecg自定义datagrid查询

    jeecg自定义datagrid查询 为什么要写这篇文章? 我们了解,使用 jeecg 提供的 CriteriaQuery 查询方式,确实能满足绝大数的需求,但是往往有那么个比较复杂的情况,需要我们直 ...

  9. idea查询类_Spring Security入门(三): 基于自定义数据库查询的认证实战

    0 引言 在笔者的上一篇文章中Spring Security入门(二):基于内存的认证一文中有提到过Spring Security实现自定义数据库查询需要你实现UserDetailsService接口 ...

最新文章

  1. 我的第一份工作是个小公司
  2. HTTP 各版本特点与区别
  3. DBgrid 第一列加入CheckBox,点击列头 全选/全消
  4. c++ map 修改value_C++知识分享之STL容器:set 容器与 map 容器的简单应用
  5. Python 中的 if __name__ == '__main__' 该如何理解
  6. Geometric-Transformations图像几何变换halcon算子,持续更新
  7. 可能用得上的jquery 插件
  8. [转]粤语发音字典-粤语翻译
  9. 文件的上传、文件的下载、I18N国际化
  10. Git bash的中文化支持
  11. 基于内容的视频标注——关键帧图象层标注
  12. c++两个文档匹配数据_MongoDB 数据库的命名、设计规范
  13. 关于Android发送邮件
  14. 南自以太网103规约
  15. 如何清理和删除 Docker 镜像
  16. 服务器虚拟化基础hcna,华为云计算全新大纲课程 乾颐堂HCNA-Cloud服务器虚拟化云计算实战课程 HCNA认证课程...
  17. c++自动抢购_淘宝 2020双十一最新版 全自动做任务软件 超级星秀猫 来了!上车~...
  18. 使用CXF+Spring发布WebService,启动报错
  19. springboot下载excel模板
  20. 一个完整简单而又强力的计算器程序--用python实现(Python3.7)

热门文章

  1. python中的迭代器,生成器,闭包,装饰器,@property
  2. opencv学习笔记10:阈值分割
  3. 【Python】身体质量指数BMI
  4. OpenCASCADE:下载安装
  5. wxWidgets:用于测试 TAB 导航的示例
  6. wxWidgets:wxDC类用法
  7. wxWidgets:wxBannerWindow类用法
  8. boost::replace_copy相关的测试程序
  9. boost::hana::iterate用法的测试程序
  10. boost::grid_graph用法的测试程序