• 【转】solr+ajax智能拼音详解---solr跨域请求


      本文转自:http://blog.csdn.net/wangzhaodong001/article/details/8529090

    最近刚做完solr的ajax智能拼音。总结一下。

    前端:jQueryAutoComplete插件。插件详见http://download.csdn.net/detail/wangzhaodong001/5018263

    后端:solr自带suggest。拼音简写功能

    效果图

      1、前端解析(客户端)

    $("#top_search_content").autocomplete("http://192.168.0.126:5080/space/suggest?wt=json&json.wrf=?", 
    {
    dataType:'jsonp',
     300,
    multiple: true,
    matchContains: true,
    multipleSeparator: " ",//分隔符
    error:function(data){
       alert("error begin");
    console.log(data);
    alert('error end');
    },
    success: function(data) {
    var autocompleteData = data.spellcheck.suggestions[1].suggestion+"";
    var parsed = options.parse && options.parse(autocompleteData) || parse(autocompleteData);
    cache.add(term, parsed);
    success(term, parsed);
    }
    });

      (1)http://192.168.0.126:5080/space/suggest?wt=json&json.wrf=?  访问地址

        wt:表示返回为json串

      json.wrf:使用jsonp跨域请求格式。注意问号。solr官方提供回调函数。问号会自动识别回调函数。有的文章写得是json.wrf=callback。之后自定义一个callback回调函数。这样的话。success函数就不会执行。我就一直纠结这个问题。之后把回调函数去掉。就行了。

        其他都是一些jQueryAutocomplate的配置。

      (2)因为返回数据为:所以需要解析

      

    所以在success中加入var autocompleteData = data.spellcheck.suggestions[1].suggestion+"";

    简单修改一下parse方法就行  var rows = data.split(" "); 换成var rows = data.split(",");即可。

    客户端处理完成

    2、solr服务端

    (1)、在schema.xml中添加字段

    <field name="suggestion" type="string" indexed="true" stored="true" termVectors="true" multiValued="true"/>

    (2)把需要搜索简写的字段使用拷贝

    <copyField source="nickName" dest="suggestion"/>
    <copyField source="userName" dest="suggestion"/>
    (3)、修改solrconfig.xml.添加以下配置
    <searchComponent class="solr.SpellCheckComponent" name="suggest">
            <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">suggestion</str>
                <!-- the indexed field to derive suggestions from -->
                <float name="threshold">0.0001</float>
                <str name="spellcheckIndexDir">spellchecker</str>
                <str name="comparatorClass">freq</str>
                <str name="buildOnOptimize">true</str>
    
    
                <!--<str name="buildOnCommit">true</str>-->
            </lst>
        </searchComponent>
        <requestHandler class="org.apache.solr.handler.component.SearchHandler"
                        name="/suggest">
            <lst name="defaults">
                <str name="spellcheck">true</str>
                <str name="spellcheck.dictionary">suggest</str>
                <str name="spellcheck.onlyMorePopular">true</str>
                <str name="spellcheck.extendedResults">false</str>
                <str name="spellcheck.count">10</str>
                <str name="spellcheck.collate">true</str>
            </lst>
            <arr name="components">
                <str>suggest</str>
            </arr>
        </requestHandler>
    <queryConverter name="phraseQueryConverter" 
                        class="org.apache.solr.spelling.SpellingQueryConverter"/>

    solr会自动把拼音检查放到

    (3)如果请求道数据为以下东西说明配置成功

  • 相关阅读:
    关于钩子函数的详细解答:
    Vue实现回到顶部
    Vue实现Rate组件(星星评分)
    Vue-router 路由模式
    javascript中实现跨域的方式
    Promise
    webpack使用
    小程序登录
    api工厂的sdk的使用
    面试题划“重点”
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/5051564.html
Copyright © 2020-2023  润新知