solr+ajax智能拼音详解—solr跨域请求

  solr+ajax智能拼音详解—solr跨域请求

最近刚做完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',

width: 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("\n"); 换成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)如果请求道数据为以下东西说明配置成功

版权声明:本文为博主原创文章,未经博主允许不得转载。

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。