zoukankan      html  css  js  c++  java
  • solr 自定义 dismax查询方式

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

     

    2、创建类IMDisMaxQParserPlugin.java

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

     

    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.   
    8.         if (null == this.qstr)  
    9.         {  
    10.             return;  
    11.         }  
    12.   
    13.         Analyzer analyzer = req.getSchema().getQueryAnalyzer();  
    14.   
    15.         if (null == analyzer)  
    16.         {  
    17.             return;  
    18.         }  
    19.   
    20.         StringBuilder norm = new StringBuilder();  
    21.         try  
    22.         {  
    23. //对question分词  
    24.             TokenStream tokens = analyzer.reusableTokenStream("question",  
    25.                     new StringReader(this.qstr));  
    26.             tokens.reset();  
    27.             Token token = tokens.next();  
    28.             while (token != null)  
    29.             {  
    30.                 norm.append(  
    31.                         new String(token.termBuffer(), 0, token.termLength()))  
    32.                         .append(" ");  
    33.                 token = tokens.next();  
    34.             }  
    35.         }  
    36.         catch (Exception ex)  
    37.         {  
    38.                     }  
    39.         if (norm.length() > 0)  
    40.             this.qstr = norm.toString();  
    41.     }  
    42. }  
  • 相关阅读:
    element-ui Checkbox 实现单选
    鼠标移到到div上,div放大
    linux下hue的安装与部署
    window10搭建pyspark(超级详细)
    Spark的checkpoint源码讲解
    Phoneix(一)简介及常用命令
    Phoneix(四)hbase导入数据同时与phoenix实现映射同步
    Phoneix(三)HBase集成Phoenix创建二级索引
    Hive数据导入Hbase
    Spark Streaming 与Filnk对比分析
  • 原文地址:https://www.cnblogs.com/chenying99/p/2613541.html
Copyright © 2011-2022 走看看