ElasticSearch學習一 小試牛刀

2021-09-11 11:56:02 字數 2444 閱讀 2935

本文根據elasticsearch官方文件整理所得,簡單介紹elasticsearch的概念以及一些簡單的檢索方法

先看es中,索引的兩個概念:

儲存資料到 elasticsearch 的行為叫做 索引(動詞) ,但在索引乙個文件之前,需要確定將文件儲存在**。

乙個 elasticsearch 集群可以包含多個索引 (名詞),相應的每個索引可以包含多個型別。這些不同的型別儲存著多個文件* 每個文件又有多個屬性 。

可以看到上述語句不是很通順,主要是由於這裡的索引有兩個意思:

名詞,這裡的索引就像乙個資料庫一樣。

動詞,索引(動詞)乙個文件就是儲存乙個文件到乙個索引(名詞)中以便它可以被檢索和查詢到。就像sql中的insert一樣。

例子:

put /megacorp/employee/1

複製**

路徑/megacorp/employee/1包含了三部分的資訊:megacorp就是索引名稱(像資料庫),employee(像一張表),1(特定employee,就像標識每一行的主鍵)。接下來的json就是儲存的內容了。

檢索文件就像http請求一樣,執行乙個get請求即可取回json文件:

get /megacorp/employee/1

類似的get還可以改為head、delete等。

搜尋所有雇員:

get /megacorp/employee/_search

查詢json中的任意指定字段:

get /megacorp/employee/_search?q=last_name:smith

使用查詢表示式搜尋,它支援構建更加複雜和健壯的查詢,使用請求體。:

get /megacorp/employee/_search

}}複製**

get /megacorp/employee/_search

},"filter": }}

}}

}複製**

全文搜尋可以完成傳統關係型資料庫很難做到的事情,如搜尋所有喜歡攀岩的雇員:

get /megacorp/employee/_search

}}複製**

這似乎與之前沒什麼不同啊?但是請看返回結果:

"hits": [},}

]複製**

elasticsearch 預設按照相關性得分排序,即每個文件跟查詢的匹配程度。第乙個最高得分的結果很明顯:john smith 的about屬性清楚地寫著 「rock climbing」 。但是jane也返回了,但是由於他的關鍵字裡並沒有完全匹配,所以他的相關性沒有john的高,排在後面。而傳統的關係型資料庫則是要麼匹配要麼完全不匹配。

那如果我想像關係型資料庫一樣只匹配完全符合的怎麼辦呢?就是用短語匹配的查詢:match_phrase

get /megacorp/employee/_search

}}複製**

則只會返回完全匹配的john的文件。

在使用聚合agg之前需要先對查詢的字段加上fileddata=true,因為文件中寫道

fielddata can consume alotof heap space, especially when loading high cardinalitytextfields.

fileddata會消耗大量的堆空間,所以預設是關閉的,在這裡要手動開啟。

}}複製**

get /megacorp/employee/_search

}}},

複製**

在輸出中可以看到,每個interest按照人數排序:

,

"aggregations": ,,]

}}

}複製**

這個aggs欄位還可以作為query欄位的子查詢。如:

get /megacorp/employee/_search

},"aggs": }}}

複製**

還支援分級彙總,如查詢每個興趣的員工平均年齡:

get /megacorp/employee/_search

, "aggs" : }}

}}

}複製**

elasticsearch 盡可能地遮蔽了分布式系統的複雜性。這裡列舉了一些在後台自動執行的操作:

elasticsearch學習入門

由於es更新很快,本文這類快餐式的記錄僅供參考 es的官網有比較全面的api,但我看過以後感覺api的層次還是有點亂,至少沒有mongodb的文件那麼簡單易讀。從簡單的應用開始慢慢認識es的。比如要搭建個中文新聞資訊的搜尋引擎,新聞有 標題 內容 作者 型別 發布時間 這五個字段 我們要提供 標題和...

elasticsearch 入門學習

原文 1 思考 大規模資料如何檢索 當系統資料量上了10億 100億條的時候,我們在做系統架構的時候通常會從以下角度去考慮問題 2 傳統資料庫的應對解決方案 對於關係型資料,我們通常採用以下或類似架構去解決查詢瓶頸和寫瓶頸 3 非關係型資料庫的解決方案 對於nosql資料庫,以mongdb為例,其它...

Elasticsearch 學習筆記

參考 關係型資料庫 elasticsearch 資料庫database索引index,支援全文檢索 表table型別type 資料行row文件document,但不需要固定結構,不同文件可以具有不同字段集合 資料列column字段field 模式schema 索引字段型別numeric dataty...