solr 实现拼音匹配

最近实现了一个拼音检索

                向大家介绍一下

             1.用solr suggest自动匹配 在 solrconfig.xml添加这样配置

           <searchComponent name="suggest"  class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">string</str><!--2012-03-27-->
  <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">text</str>
  <float name="threshold">0.005</float>
  <str name="buildOnCommit">true</str>
  <str name="comparatorClass">freq</str>
  <str name="sourceLocation">../dic/dict.txt</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.onlyMorePopular">true</str>
  <str name="spellcheck.count">10</str>
  <str name="spellcheck.collate">true</str>
  </lst>
  <arr name="components">
  <str>suggest</str>
 </arr>
 </requestHandler>


二  调用

/**
     * <p> 方法名:suggester </p>
     * <p> 功能:用于自动搜索,拼音查询查询匹配相近关键字</p>
     * <p> 作者:陈佳 </p>
     * <p> 编写日期:2011-12-12</p>
     * <p> 查询参数:parame </p>
     */
    public JSONObject suggester(String preste){
        List list=new ArrayList<String>();
        String bsString=cp.intercepted(preste);
        SolrQuery q = new SolrQuery().setQueryType("/suggest").setQuery(bsString);
        QueryResponse queryResponse;
        JSONArray arr=new JSONArray();
    
        JSONObject json = new JSONObject();
        try {

            log.info(q);
            queryResponse = ad.solrServer.query(q);
            try {
                List tags =(List) ((NamedList) ((NamedList) ((NamedList)queryResponse.getResponse().get("spellcheck")).get("suggestions")).get(bsString)).get("suggestion");
                  for(int i=0;i<tags.size();i++){
                      JSONObject obj=new JSONObject();
                      String [] bStrings=tags.get(i).toString().split(" ");
                      Map<String, String> map=    queryCount(bStrings[1].toString());
                      obj.put("name", bStrings[1]);
                      obj.put("count",map.get("count"));
                      arr.put(obj);
                  }
                  json.put("flag", "1");
                  json.put("resp_data", arr);
//                  json.put("value", preste);
            } catch (Exception e) {
                json.put("flag", "0");
                return json;
            }
    
        } catch (Exception e) {
             e.printStackTrace();
             log.info(e+"Search类中的|suggester()|查询失败");
             return json;
        }
        return json;
    
        
    }


    


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值