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的一些基本使用進行了解了。


 

2.映射

  elasticsearch在導入數據到索引時會按照固定的模板去導入數據,模板中可以設置字段的數據類型,以及設置數據的分詞策略,注意es會在數據導入時就對數據做分詞,然后在搜索數據的時候,會按照存入時的分詞策略查詢數據

{"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-ik

下載完成直接解壓到es的pulgin目錄下就行,ik分詞器默認有兩種分詞方式:

  (1) ik_max_word,該模式的分詞策略為最大化詞匯搜索,既會遞歸整個詞條,將詞條中所有的語句列出,允許重復。

  (2) ik_smart,該策略不允許詞匯重復,詞條中如果有沒有匹配到詞典的字直接忽略

關於ik分詞器這里就不再詳細敘述了,有一些關於詞典的知識請大家自行百度,這里只對elasticsearch重點講述!


3.搜索

①query組件

好了,到了正式介紹es的時候,搜索引擎不用多說搜索肯定是最重要的一點,下面給出一個最簡單的例子

 

  首先看到 紅色箭頭1 ,整個語句意思從前至后 分別為 GET 方式對es請求, /catalogue 為請求的索引地址,可以具體到/type甚至id,/_search代表發起查詢請求,而后面的則是請求的json體,毫無疑問json體是搜索的關鍵也是今天的主要講解內容。

       再看到紅色剪頭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架構實現電商搜索引擎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM