zoukankan      html  css  js  c++  java
  • 智能提示(一) Solr (suggest)

    电商搜索中要实现这么一块功能,当输入文字时候。下拉框提示。类似于百度搜索


      在师出名门的基于lucene的solr搜索引擎中。提供了 拼写检查和智能提示这块功能。

      拼写检查就是用来检查用户输入的检索内容是否存在,假设不存在则,给它提示出相近,或相似的内容。

      而检索建议则是用户输入某个检索条件后。会立马友好的给出一系列提示内容,并推荐首个出现的相似的词,作为推荐词。


      也就是说 拼写检查是能够作为一个单独功能使用,但suggest一般引用拼写检查组件

    实现过程。配置solrconfig.xml

      <searchComponent name="suggest" class="solr.SpellCheckComponent">  
         <!-- <str name="queryAnalyzerFieldType">text_general</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">article</str>  
            <float name="threshold">0.0001</float> 
    		<!-- 使用自己定义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="solr.SearchHandler">    
        <lst name="defaults">    
            <str name="spellcheck">true</str>    
            <str name="spellcheck.dictionary">suggest</str>    
            <str name="spellcheck.count">11</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>    
      </requestHandler>

    重新启动solr服务。运行solrjclient代码

    	/**
    	 * @method: spellcheck
    	 * @Description: 智能提示 Solr里叫做Suggest模块
    	 */
    	public static List<Map<String, String>> suggest(String word,String corename) {
    		SolrServer server=Indexer.getHttpSolrServer(corename);
    		List<Map<String, String>> wordList = new ArrayList<Map<String, String>>();
    		try {
    			SolrQuery query = new SolrQuery();
    			query.set("q",  word);// 查询的词
    			query.set("qt", "/suggest");// 请求到suggest中
    //			query.set("spellcheck.count", "");// 返回数量
    			QueryResponse rsp = server.query(query);
    
    			// 上面取结果的代码
    			SpellCheckResponse re = rsp.getSpellCheckResponse();// 获取拼写检查的结果集
    			if (re != null) {
    				for (Suggestion s : re.getSuggestions()) {
    					List<String> list = s.getAlternatives();// 获取全部 的检索词
    					for (String spellWord : list) {
    						Map<String, String> map = new HashMap<String, String>();
    						map.put("code", spellWord);
    						wordList.add(map);
    					}
    				}
    //				String t = re.getFirstSuggestion(word);// 获取第一个推荐词
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return wordList;
    	}

    前端简单效果图:



  • 相关阅读:
    tomcat与resin的比较
    Linux Resin 安装配置
    [BZOJ3456]城市规划
    ZJOI 2017 仙人掌
    「LibreOJ NOI Round #1」动态几何问题
    [SDOI2015]约数个数和
    codeforce 940F
    codeforce 940F
    codeforce 940E
    [NOI2009]植物大战僵尸
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6805552.html
Copyright © 2011-2022 走看看