首先elasticsearch目前的結構爲 /index/type/id id對應的就是存儲的文檔ID,elasticsearch通常將數據以JSON格式存儲。咱們能夠將elasticsearch和關係型數據庫進行比較,index至關於關係型數據庫中的database,type至關於table,而id就至關於表中的主鍵,elasticsearch中一個文檔存儲的一個json則能視爲是關係型數據庫中一張表的一行數據,而ID就是他的主鍵,在理解了es的存儲結構後咱們就能夠對elasticsearch的一些基本使用進行了解了。git
elasticsearch在導入數據到索引時會按照固定的模板去導入數據,模板中能夠設置字段的數據類型,以及設置數據的分詞策略,注意es會在數據導入時就對數據作分詞,而後在搜索數據的時候,會按照存入時的分詞策略查詢數據github
{"settings":{ "analysis" : { "analyzer" : { "ik" : { "tokenizer" : "ik_max_word" } } }, "index" : { "analysis.analyzer.default.type": "ik_max_word" } }, "mappings": { "doc": { "dynamic": "false", "properties": { "brand": { "type": "string", "analyzer": "ik_max_word" }, "product_name": { "type": "string", "analyzer": "ik_max_word" } } } } }
關於分詞,elasticsearch中默認的標準分詞器基本只能將一句話只能分紅一個個的字,因此咱們要用到ik分詞器,切記版本問題。數據庫
下載地址》》:https://github.com/medcl/elasticsearch-analysis-ikjson
下載完成直接解壓到es的pulgin目錄下就行,ik分詞器默認有兩種分詞方式:數組
(1) ik_max_word,該模式的分詞策略爲最大化詞彙搜索,既會遞歸整個詞條,將詞條中全部的語句列出,容許重複。架構
(2) ik_smart,該策略不容許詞彙重複,詞條中若是有沒有匹配到詞典的字直接忽略app
關於ik分詞器這裏就再也不詳細敘述了,有一些關於詞典的知識請你們自行百度,這裏只對elasticsearch重點講述!elasticsearch
好了,到了正式介紹es的時候,搜索引擎不用多說搜索確定是最重要的一點,下面給出一個最簡單的例子搜索引擎
首先看到 紅色箭頭1 ,整個語句意思從前至後 分別爲 GET 方式對es請求, /catalogue 爲請求的索引地址,能夠具體到/type甚至id,/_search表明發起查詢請求,然後面的則是請求的json體,毫無疑問json體是搜索的關鍵也是今天的主要講解內容。spa
再看到紅色剪頭2,es中全部的查詢都要包含在query組件中,query後面則跟着一個JSON,JSON的內容也就是紅色剪頭3,match_all表明無條件的查詢即搜索全部,一樣的還有match表明有條件的查詢,查詢條件放在match後面的json中,記住整個查詢體都按照json格式來寫。
如上隊商品名進行查詢,查出全部名字包含洗衣粉的商品,搜索結果以下:
能夠看到返回hits的實際上是個json數組,每一個json中包含着該數據的index、type、id以及匹配的分數_score以及數據_source
好了,這樣就介紹完了最基本的單條件搜索
上面是單條件查詢,那麼多條件怎麼查詢呢,能夠看到以下圖:
能夠看到直接在query裏面是不能進行多條件查找的,這裏須要用到bool組件
使用bool組件進行復雜的查詢:
能夠看到使用bool組件後多條件搜索就沒有報錯,那麼bool的結構是怎麼樣呢?
bool表達式包含三個jsonArray:
(1)must 包含了全部必須匹配的條件,若是有一項不匹配則排除,相似於邏輯且
(2) should包含的條件必須知足至少一個,相似於邏輯或
(3)must_not 包含了全部排除的條件,相似於邏輯非
整個結構以下:
{ "query":{ "bool":{ "must":[], "should":[], "must_not":[] } } }
而且bool直接多重嵌套使用,因此想作出複雜的搜索功能,能夠在bool上多下功夫
還有如上圖中的range範圍控制,和size查詢的大小就不細說,看圖應該就明白了
這裏再講一下es中怎麼作到分頁查詢
es中和size並列還有from屬性,size是一次查詢的數量,from則是從第幾個開始查,搭配使用便可達到分頁查詢的目的
es中可使用sort對數據進行排序,sort爲一個jsonArray,能夠按照多個字段對數據進行排序,說明一下,若是不使用sort排序,es則默認按照_score匹配分數進行降序排序,當使用sort而且sort中沒有_score時,_score會變成null從而達到排除按照_score排序,按照多個條件進行排序時,按照jsonArray中json的排序順序進行先排和後排,關於升序降序學過數據庫的童鞋應該很清楚!什麼?沒學過數據庫?那你如今還不去學數據庫?
至此elasticsearch基礎教程結束,後面將爲你們帶來elasticsearch的進階教程和ELK架構實現電商搜索引擎