ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基礎教程

1.elasticsearch的結構

  首先elasticsearch目前的結構爲 /index/type/id  id對應的就是存儲的文檔ID,elasticsearch通常將數據以JSON格式存儲。咱們能夠將elasticsearch和關係型數據庫進行比較,index至關於關係型數據庫中的database,type至關於table,而id就至關於表中的主鍵,elasticsearch中一個文檔存儲的一個json則能視爲是關係型數據庫中一張表的一行數據,而ID就是他的主鍵,在理解了es的存儲結構後咱們就能夠對elasticsearch的一些基本使用進行了解了。git


 

2.映射

  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


3.搜索

①query組件

好了,到了正式介紹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

好了,這樣就介紹完了最基本的單條件搜索

②bool組件

上面是單條件查詢,那麼多條件怎麼查詢呢,能夠看到以下圖:

能夠看到直接在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架構實現電商搜索引擎

相關文章
相關標籤/搜索