zoukankan      html  css  js  c++  java
  • solr suggest智能提示配置

     

    目录

    配置文件

    • solrconfig.xml
      <searchComponent name="suggest" class="solr.SpellCheckComponent">   
    
      <str name="queryAnalyzerFieldType">string</str>     <!-- 设定需要智能提示词的字段 的数据类型-->
      <lst name="spellchecker">     
          <str name="name">suggest</str>     
          <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>     
          <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>     
          <str name="field">hot_word</str>                           <!-- 设定需要智能提示词的字段名 -->
          <float name="threshold">0.00001</float>             <!--  设定频率:自我解释为:你现在的商品数量,占商品总数的百分比,
                                                                                                 低于你配置的百分比就不会被suggest检索
                                                                                                 你配置的低一点,那么商品数量较少的那部分商品就会被你检索出来-->
          <!-- 使用自定义suggest词库词可以将如下两行的注释取消  
          <str name="sourceLocation">suggest.txt</str>  
          <str name="spellcheckIndexDir">spellchecker</str>
           --> 
          <str name="comparatorClass">freq</str>   
          <str name="buildOnOptimize">true</str>   
          <str name="buildOnCommit">true</str>        
      </lst>     
    </searchComponent>       
    
    <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">    
      <lst name="defaults">      
          <str name="spellcheck">true</str>     
          <str name="spellcheck.dictionary">suggest</str>   
          <str name="spellcheck.count">15</str>     
          <str name="spellcheck.onlyMorePopular">true</str>   
          <str name="spellcheck.extendedResults">false</str>        
          <str name="spellcheck.collate">true</str>   
          <!--<str name="spellcheck.build">true</str> -->     
      </lst>     
    
      <arr name="components">     
          <str>suggest</str>    
      </arr> 
    • schema.xml

    我需要智能提示的字段为商品名,我没有在原来的基础上进行智能匹配词,又创建了一个类型为String的字段。

    由于ik是分词,所以重新定义了一个。可以试试类型为IK分词的。看一下效果。

       <field name="hmp_name" type="text_ik" indexed="true" stored="true"/>
       <field name="hot_word" type="string" indexed="true" stored="true"/>

    Java代码

    @Override
        public JSONObject suggestHotWordList(String hotword) throws Exception 
        {
             JSONObject msgJson = new JSONObject();
             List<String>  wordList=new ArrayList<String>(); 
             SolrQuery query = new SolrQuery();
             query.set("q", "hot_word:"+hotword);//查询的词 
    
             query.set("qt", "/suggest");//请求到suggest中 
    
             query.set("spellcheck.count", "100");//返回数量 
    
             QueryResponse queryResponse = solrServer.query(query);
             
             //获取拼写检查的结果集 
             SpellCheckResponse re=queryResponse.getSpellCheckResponse();
             
             if (re != null) 
             {
                 for(Suggestion s : re.getSuggestions())
                 { 
                      List<String> list = s.getAlternatives();//获取所有 的检索词 
                      for(String spellWord : list)
                      { 
                          wordList.add(spellWord);
                      } 
                }   
             }
            msgJson.put("numFound", wordList.size());
            msgJson.put("hotwords", wordList);
            return msgJson;
        }

    遇到的问题

    遇到的问题:有的词可以匹配出来。有的词存在,确匹配不出来。那就是有可能是因为频率不够。

    自己的理解:就是说,你现在的商品数量,占商品总数的百分比,低于你配置的百分比就不会被suggest检索,你配置的低一点,那么商品数量较少的那部分商品就会被你检索出来。

    也就是上面配置文件中,提到的。 0.00001..

  • 相关阅读:
    JAVA中==与equals的区别
    spring面试重点
    struts2
    每个新手程序员必看的 SQL 指南
    QueryRunner的使用
    jquery GET POST
    jquery添加元素
    jquery 滑动动画
    jdbc 安装驱动
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  • 原文地址:https://www.cnblogs.com/anny0404/p/5532560.html
Copyright © 2011-2022 走看看