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

简介:   本文转自:http://blog.csdn.net/wangzhaodong001/article/details/8529090 最近刚做完solr的ajax智能拼音。总结一下。 前端:jQueryAutoComplete插件。

  本文转自: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',
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)如果请求道数据为以下东西说明配置成功

相关文章
|
7月前
|
前端开发
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
|
7月前
|
JSON 前端开发 JavaScript
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)
探秘 AJAX:让网页变得更智能的异步技术(下)
|
7月前
|
XML 前端开发 JavaScript
探秘 AJAX:让网页变得更智能的异步技术(上)
探秘 AJAX:让网页变得更智能的异步技术(上)
探秘 AJAX:让网页变得更智能的异步技术(上)
|
前端开发 JavaScript
|
前端开发 JavaScript 机器人
利用Ajax实现智能回答的机器人
利用Ajax实现智能回答的机器人
利用Ajax实现智能回答的机器人
|
安全 JavaScript 前端开发
Springboot如何优雅的解决ajax+自定义headers的跨域请求
Springboot如何优雅的解决ajax+自定义headers的跨域请求
Springboot如何优雅的解决ajax+自定义headers的跨域请求
|
前端开发 JavaScript
jQuery Ajax 简单的实现跨域请求
jQuery Ajax 简单的实现跨域请求
342 0
|
JSON JavaScript PHP
AJAX 跨域请求 - JSONP获取JSON数据 jsson和jsonp
Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。
1664 0
|
前端开发
ajax跨域请求数据
最近开始接触ajax的跨域请求问题,相比网上说的一大堆,我这里就说得比较浅显了。 关于为什么要跨域这个问题,实际的需求是当网站项目部署在一个域名上的时候,分域可以很好地解决网站卡顿问题(拥有多台服务器就另当别论)。
706 0
|
Web App开发 前端开发 JavaScript