上次研究到了搜索模板,那么一直在工具上请求也不是办法,总归是要融入到实际应用中去才显得接地气吧!
那么废话很少说,我就开始了,先让我来打打小算盘。
1.环境配置作好了
2.数据导入作好了
3.基础查询懂了
4.模板也会了
5.搜索提示也知道了前端那么接下来须要作的事情就是:
1.把原来项目的搜索框加入咱们研究的东西,拼凑起来变成一个完整的结果。
那么咱们要作的有:
1.写一个数据请求到9200服务端获取结果。
2.将结果返回展现到页面。
3.作好提示框匹配样式ajax> 1.写一个数据请求到9200服务端获取结果。
哥哥们能够看看我写的请求,这里为了方便学习因此写的比较简单json
这是C#服务端的,我没有查文档本身根据引用的dll作了简单的快速监视调试出了这个语句。
1.先链接9200服务器
2.抛出key参数
3.post请求获取json返回
这个结果须要引用2个类dll跨域
这我只作个示范,给不会前端的朋友借鉴一下。浏览器
这是前端请求写法,更通用一点,这里我作了如下几件事:
var raw = JSON.stringify({ "id": "forum_search_goods", "params": { "field": "model", "query": "" + q + "", "size": 10 } }); 定义了请求参数
这个就是我以前写的模板啦,我这边就是调用已经存储的模板服务器$.ajax(
{
url: "http://127.0.0.1:9200/data/_search/template",
async: false,
type: 'post',
dataType: "json",
data: raw,
contentType: "application/json;charset=UTF-8",
success: function (data) {
dataObj = data.hits.hits;appfor (var i = 0; i < data.hits.hits.length; i++) { matches.push(data.hits.hits[0]._source.model); } cb(matches); }, error: function (data, status, e)//服务器响应失败处理函数 { console.log(data.responseText); } } ); }; };
这里是请求9200服务端。那么咱们就来试一下咯。async
输入1,咋没反应呢?打开浏览器监视器看看
啥玩意我就跨域了。这个问题我去百度搜了很久都没找到答案,而后我想到了jsonp
可是发现请求过去以后,跨域问题是没有了,又报了个新错误。
什么玩意啊,气死我了。
network里面啥都没显示。
把错误的连接直接请求返回了这个错误,很明显是我请求的问题,致使了服务端没法正确的识别
才会抛出400错误。我找了好久找不到问题。ide
查了下文档,原来es对于请求自带的参数不会作处理,而后传递过来以后es拿到了会识别不出来
那咋办,那么既然这样他确定是有配置的地方,那么我找到了这2句话,让ES支持跨域,而后回
过头来把jsonp改为json请求下。函数
总算是进入success里面了,开心开心,基本上算是一个小目标了。
接下来我定义了一系列tyhead得样式,这个样式是根据文档写的
而后这在source下面我须要自定义咱们的联想框,这里是我写的,而后启动试试看。
能够了能够了。哈哈哈哈哈。
后面的分词,拼音模糊,先后顺序的调整我再慢慢的改过来。