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

【转】solr+ajax智能拼音详解---solr跨域请求的更多相关文章

  1. jsonp详解及跨域请求

    什么是JSONP? JSON是一种轻量级的数据传输格式语言,被广泛应用于当前Web应用中.JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数 ...

  2. 详解 JSONP跨域请求的实现

          跨域问题是由于浏览器为了防止CSRF攻击(Cross-site request forgery跨站请求伪造),避免恶意攻击而带来的风险而采取的同源策略限制.当一个页面中使用XMLHTTPR ...

  3. JavaScript系列----AJAX机制详解以及跨域通信

    1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...

  4. 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  5. 详解 CORS跨域的几种不同实现方式

    CORS 定义 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器向跨源服务器,发出XMLHttpRequ ...

  6. 详解JS跨域问题

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域.             JavaScript   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  7. 详解js跨域

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 对于端口和协议的不同,只能通过后台来解决.URL 说明 是否允许通信 http://www.a.com/a.js http ...

  8. ajax获取json数据及实现跨域请求

    最近想练习一下ajax获取json数据 , 首先上网找一些在线的可用来测试的接口. -----------------------------------------------------这里是接口 ...

  9. AJAX跨域请求详解

    最近开始学习ajax,学习ajax必须得掌握的就是跨域请求,实际上在不同源的地址上发送请求就是跨域请求 域名地址的组成: http:// www . google : 8080 / script/jq ...

随机推荐

  1. JS弹出窗口代码大全(详细整理)

    1.弹启一个全屏窗口 复制代码代码如下: <html> <body http://www.jb51.net','脚本之家','fullscreen');">; < ...

  2. C# 中的多线程

    参考网站http://blog.gkarch.com/topic/threading.html

  3. BZOJ-2929 洞穴攀岩 最大流Dinic(傻逼题)

    竟然没有1A真羞耻...1分钟不到读完题,10分钟不到打完....MD没仔细看...WA了一遍,贱! 2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec Memory Limi ...

  4. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  5. Prim和Kruskal求最小生成树

    Prim: 算法步骤: 1.任意结点开始(不妨设为v1)构造最小生成树: 2.首先把这个结点(出发点)包括进生成树里, 3.然后在那些其一个端点已在生成树里.另一端点还未在生成树里的所有边中找出权最小 ...

  6. 洛谷P1993 小 K 的农场

    题目描述 小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个 农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描 述: 农场 ...

  7. HDU2888 Check Corners

    Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numbers ( 1 ...

  8. 用Filter程序实现静态HTML页面的访问保护

    今天为练习Filter的用法编写了一个小程序. 当用户通过article的超链接读取文章的时候,会通过Filter进行检测有没有登录.只有登录的读者才能跳到文章页面,否则跳到登录页面. 文章就用简单的 ...

  9. Struts2 自定义Result

    注意:我只要是解决自定义返回Json 和异常处理问题 新建一个类 AjaxResult   继承 StrutsResultSupport 看看代码吧 public class AjaxResult e ...

  10. eclipse错误:Unable to read workbench state. Workbench UI layout will be reset.XML document structures

    Unable to read workbench state. Workbench UI layout will be reset.XML document structures must start ...