能夠進行模糊搜索:html
GET job/type1/_search { "query":{ "fuzzy":{ "title":{ "value":"linx", "fuzziness": 2, "prefix_length": 1 } } } }
在上面的例子中,可模糊查詢與linx類似的單詞。
fuzziness是指「編輯距離」,就是說從一個字符串想要經過增刪改變換到另外一個字符串,須要操做的最少次數。好比,linux和linxu之間的編輯距離爲1,由於交換ux就能夠完成變換。
prefix_length是說多少位字符認爲是前綴。前綴部分必須徹底匹配。linux
搜索建議功能,須要配合程序,在向es中存入文檔時,就須要經過分詞等方式,指定搜索建議字段的內容。git
指定以後,可經過suggest方式,根據用戶的當前輸入,獲取搜索建議:github
GET wechatsearch/passage/_search { "suggest":{ "my-suggest":{ "text":"ppt", "completion":{ "field":"suggest", "fuzzy":{ "fuzziness":2 } } } }, "_source": "ptitle" }
上面代碼搜索出與ppt關鍵詞相近的搜索建議。其中,fuzziness值爲2,所以,像p2p、pdf之類的關鍵詞也會被搜索出來。較小的fuzziness會有更精確的匹配。web
返回結果示例:網站
{ "took": 20, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 0, "max_score": 0, "hits": [] }, "suggest": { "my-suggest": [ { "text": "ppt", "offset": 0, "length": 3, "options": [ { "text": "pdf", "_index": "wechatsearch", "_type": "passage", "_id": "16", "_score": 10, "_source": { "ptitle": "Smallpdf:無所不能的PDF在線處理站" } }, { "text": "ppt", "_index": "wechatsearch", "_type": "passage", "_id": "7", "_score": 10, "_source": { "ptitle": "這18個技巧都不知道,別說你會作PPT" } }, { "text": "pa", "_index": "wechatsearch", "_type": "passage", "_id": "10", "_score": 5, "_source": { "ptitle": "吐血整理了這20個堪稱神器的網站,個個都能解你燃眉之急" } } ] } ] } }
能夠指定哪些字段搜索高亮,而且指定高亮字符兩側的包裹標籤,從而實現查詢的返回結果包含html高亮效果。搜索引擎
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } }, "highlight": { "fields" : { "about" : {} } } }
注意,高亮的結果在返回時單獨存放,並非將_source數據作了改變。
單獨有一個highlight部分存放高亮內容:spa
{ ... "hits": { "total": 1, "max_score": 0.23013961, "hits": [ { ... "_score": 0.23013961, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] }, "highlight": { "about": [ "I love to go <em>rock</em> <em>climbing</em>" ] } } ] } }
關於ES的入門使用暫時整理到這裏。
ES的官方文檔是最好的參考資料,介紹很全面。3d
完成這些文檔的同時,作了一個簡單的小項目,基於Python(Django)的web搜索界面,採用ES做爲搜索引擎。
此項目地址:
https://github.com/dox1994/We...rest
搜索提示:
搜索結果: