上次研究到了搜索模板,那麼一直在工具上請求也不是辦法,總歸是要融入到實際應用中去才顯得接地氣吧!
那麼廢話很少說,我就開始了,先讓我來打打小算盤。
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下面我須要自定義咱們的聯想框,這裏是我寫的,而後啓動試試看。
能夠了能夠了。哈哈哈哈哈。
後面的分詞,拼音模糊,先後順序的調整我再慢慢的改過來。