zoukankan      html  css  js  c++  java
  • 解决solr关键字搜索高亮,截断语句(不是完整的一句话)问题,附带按关键字权重排序

    用的ik分词器

    所在core的solrconfig.xml部分配置

    <requestHandler name="/select" class="solr.SearchHandler">
         <lst name="defaults">
             <str name="echoParams">explicit</str>
             <int name="rows">10</int>	   
             <str name="defType">edismax</str>
    	  <str name="qf">name^20 descripe^2 text ^2</str>
    	  <str name="hl.usePhraseHighlighter">false</str>
    	 <str name="hl.useFastVectorHighlighter">true</str>
    	 <str name="hl.boundaryScanner">breakIterator</str>
    	  <str name="hl.encoder">html</str>
              <str name="hl.formatter">htmla</str>
         </lst>
      </requestHandler>
    
    
    <searchComponent class="solr.HighlightComponent" name="highlight">
       <highlighting>  		
        <formatter name="htmla" default="true" class="solr.highlight.HtmlFormatter">
            <lst name="defaults">
              <str name="hl.simple.pre"><![CDATA[<b>]]></str>
              <str name="hl.simple.post"><![CDATA[</b>]]></str>
            </lst>
          </formatter>
          <encoder name="html" class="solr.highlight.HtmlEncoder" />  		
    	  	<boundaryScanner name="default" default="false" class="solr.highlight.SimpleBoundaryScanner">
      	      <lst name="defaults">
                     <str name="hl.bs.maxScan">10</str>
              	  <str name="hl.bs.chars">.,!? </str>
                  </lst>
    	  	</boundaryScanner>
    	  	<boundaryScanner name="breakIterator" default="true" class="solr.highlight.BreakIteratorBoundaryScanner">
    	  		<lst name="defaults">
    	  	      <str name="hl.bs.type">SENTENCE</str>
    	  		</lst>
    	  	</boundaryScanner>
      	</highlighting>
      </searchComponent>
    

     所在core的schema.xml部分配置

    <field name="text" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/>
    <field name="name" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/>
    <field name="descripe" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/>
    

    用solrquery查询 版本是5.4.1

            StringBuilder params = new StringBuilder();
            params.append("name:测试 OR descripe:测试 OR text:测试");
    
            SolrQuery sq = new SolrQuery();        
            sq.setHighlight(true);
            sq.setQuery(params.toString());
            sq.set("defType","dismax");
            sq.setStart(1);  
            sq.setRows(20);//每一页多少值        
            sq.setHighlightFragsize(20);//分片大小
            sq.setHighlightSnippets(1);
            sq.setRequestHandler("/select");
            sq.set("fl", "*,score");
            sq.addSort(new SortClause("score", ORDER.desc)); // 排序  

    HttpSolrClient hsc = new HttpSolrClient("http://地址:端口/solr/bookCore");

    几个关键点

    hl.usePhraseHighlighter

    hl.useFastVectorHighlighter   

    <str name="defType">edismax</str>

    <str name="qf">name^20 descripe^2 text ^2</str>(^后面是分值)

    <str name="hl.boundaryScanner">breakIterator</str>

    这个参数的意思,网上有很多,这里就不介绍了

  • 相关阅读:
    CSS样式权值
    JS正则表达式总结
    call, apply, bind作用
    JSON和JSONP区别
    重重保护下的堆
    [转载]舌尖上的清华 I
    [转载]Windows Phone学生开发者注册教程2月版
    忙碌的生活没有空写博客
    Qt应用之手机截图
    [转]我是设计院的
  • 原文地址:https://www.cnblogs.com/zxcgy/p/7160618.html
Copyright © 2011-2022 走看看