ELK之Elasticsearch介紹及在搜尋中的使用
-
ELK: Elasticsearch + Logstash + Kibana
Elasticsearch: 是一個分散式的、實時全文搜尋及分析引擎;檢索效能高效是最大的特色。
Logstash: 是一個數據收集器,有豐富的外掛(input/filter/output)。
Kibana: 是一個基於Elasticsearch的web展示平臺。
-
Elasticsearch的基本概念
近實時(Near Realtime): 從一個doc被索引到能夠查詢到, 大約有1秒的間隔
index: 索引,類似SQL中的database, NoSQL中的database
type: 一個index下, 可以有多個type, 類似SQL中的table, NoSQL中的collection
document: 某index/type下的一條資料,以json的格式。類似SQL中的row,NoSQL中的document.
MySQL |
database |
table |
row |
mongodb |
database |
collection |
document |
ES |
index |
type |
document |
shard: 一個index可以有多個shards,預設是5。目的是,方便水平擴容和提高負載。一旦index被建立,shards的數量不能再改。每個shard,就是一個Lucene的index。一個Lucene的index能夠容納的documents的數量上限是2,147,483,519 (= Integer.MAX_VALUE - 128)
replica: 一個index的備份數,預設是1。目的是,提高可靠性,加快search的速度。replicas的數量可以隨時修改。e.g. http://10.16.25.16:9000/_plugin/head/
node:
cluster: one or more nodes with same cluster name
-
Schemaless or not
在某種意義上,ES是schemaless的, 在索引doc的時候, 直接指定index/type就可以了,無需對index/type進行任何的設定。實際上, 在index/type被建立的時候,ES會去猜json裡面的欄位,然後自動生成一份mapping(mapping是對doc中, 各欄位的型別的定義, 及索引方式等的解析)。
一旦有了mapping, 就變成schema的了,doc裡面已有的欄位型別 就不能隨意更改了。
-
template and mapping
mapping:用來說明doc裡面的各個欄位的型別, 以及如何儲存和索引。mapping依賴於index, 不同的type有不同的mapping。mapping中的欄位型別, 一旦建立,不能修改,但可以新增欄位。
template:在index被建立的時候, 提供index的setting以及需要的mapping,先於index存在,且只在index 被建立的時候生效,一旦索引被建立,修改template就不會對已經建立的index生效了。
-
ES的三個基本問題之寫入資料
ES使用了2個埠9200和9300(預設)
9200負責HTTP的請求
e.g. curl -XPUT http://esnode:9200/index/type -d ‘{json_doc}’
9300是TCP埠,供ES nodes之間通訊使用。
寫資料到ES,所使用的clients分成2種,
第一是JAVA的,第二是其它。
先說其它的(python/go/...等),都是用的是http REST api的方式,即訪問的是9200.
再說JAVA client,根據角色的不同, 用分成2種,
其一,節點client(node client)即,java client成為ES cluster中的一個節點,但不儲存資料。
其二,傳輸client(transport client),即java client不加入ES cluster, 只是傳輸資料給ES cluster中的節點。JAVA client使用的都是9300埠, 使用的是Elasticsearch的傳輸 協議(native Elasticsearch transport protocol)。
Java 的客戶端的版本號必須要與 Elasticsearch 節點所用的版本號一樣,不然他們之間可能無法識別
-
ES的三個基本問題之讀取資料
-
通過doc ID直接獲取
e.g. curl -XGET xxxx/yyyy/AVQvYyK6aK8LxcWQ324f
and the return
{"_index":"xxxx”,"_type":"yyyy","_id":"AVQvYyK6aK8LxcWQ324f”,
"_version":1,"found":true,
"_source”:{json_doc}
}
-
通過_search獲取,size default 10
GET /index/type/_search?q=last_name:Smith
GET /index/type/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
-
通過_scroll來獲取大量資料,類似database的遊標
一般用於reindex
-
ES的三個基本問題之效能優化
CPU/記憶體/SSD磁碟
除了官網上介紹的,ES_HEAP_SIZE/swap off/bootstrap.mlockall等
translog.durability:”async”,這個對寫的效能影響巨大,
預設是request,即每當有增刪改操作時, 就會觸發flush/commit to Lucene(磁碟IO)
-
ES的欄位型別及index
若沒有mapping, ES會根據上面的規則去guess
若有mapping,ES會根據mapping對欄位進行匹配及轉換
e.g. 某欄位在mapping中是number,而doc裡面是 “123”,則會被自動轉成123;“cde”則會報錯
ES中, 不同型別的欄位, ES的處理方式是不同的。對於非string欄位, ES會原樣索引;對於string型別的欄位,index型別有:no/not_analyzed/analyzed
no |
not_analyzed |
analyzed(預設) |
不索引,該欄位無法search |
不分析,原樣索引 |
只對string欄位,先分析(分詞),然後索引 |
analyzer: 對於index:analyzed的string型別的欄位, 使用哪種analyzer(when index and also search), 預設是standard,對於中文, 會切成單字,搜尋中會使用IK
-
DSL介紹
1) match_all
{ "match_all": {}} 匹配所有的, 當不給查詢條件時,預設。
2) match
進行full text search或者exact value(非string欄位或not_analyzed的欄位),進行匹配
3) multi_match
同時對多個欄位進行同樣的match
{
"multi_match": {
"query": "full text search",
"fields": [ "title", "body" ]
}
}
4) range
對number或時間欄位進行
{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}
5) term
對欄位進行確切值(exact value)的查詢,如數字、時間、bool、not_analyzed欄位等。
{ "term": { "age": 26 }}
{ "term": { "date": "2014-09-01" }}
{ "term": { "public": true }}
{ "term": { "tag": "full_text" }}
6) terms
和term一樣, 不同的是,可以指定多個值來進行精確匹配
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}
7) exists/missing
用來查詢某個欄位是否有值, 類似SQL中的 not is_null/is_null
{
"exists": {
"field": "title"
}
}
8) bool 用來連線一系列的查詢子句:包括must/must_not/filter/should
{
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "from" : 10, "to" : 20 }
}
},
"should" : [
{
"term" : { "tag" : "wow" }
},
{
"term" : { "tag" : "elasticsearch" }
}
]
}
}
-
query VS filter
除了需要匹配程度的查詢(有_score的情況)使用query, 其餘的查詢都應該使用filter。(As a general rule, use query clauses for full-text search or for any condition that should affect the relevance score, and use filters for everything else.)
filter的結果是會被ES快取的, 以此來提高效率。
另外, filter由於不計算分數及排序, 所以, 速度較 query要快。
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
-
script
ES支援使用script。(script fields, script score)
groovy default script language
script預設是被禁止的, 需要在config/elasticsearch.yml中開啟
script.inline: true
script.indexed: true
script有4種:inline/file/indexed/plugin
1) inline
GET /_search{"script_fields": {"my_field": {"script": {"inline": "1 + my_var","params": {"my_var": 2 } } } }}
2) file
存放的位置:config/scripts/my_script.groovy
GET /_search
{ "script_fields":
{ "my_field": {
"script": {
"file": "my_script",
"params": { "my_var": 2 }
}
}
}
}
3) indexed
將指令碼儲存在ES內, index as .script, 然後通過ID訪問。
curl -XPOST localhost:9200/_scripts/groovy/indexedCalculateScore -d '{"script":"log(_score * 2) + my_modifier"}'
{ "script_score":{ "script":{ "id": "indexedCalculateScore", "lang" : "groovy", "params":{ "my_modifier":8}}}}
4) plugin
需要install到ES
{"script_score":{"script":{"inline":"my_script","lang":"native"}}}
ssh://git.wandoulabs.com:29418/es-search
es-search/es-score下有MyNativeScript*.java是個示例, 比較方便。
-
function_score
doc and source:
使用source可以訪問doc的原值,但速度較慢(not loaded into memory), 訪問時需要經歷loaded -> parsed的過程。
doc可以訪問not_analyzed的欄位的值,e.g. doc[‘field_name’].value
速度的優化措施:
0) 使用doc, 不使用source,使用source慢得離譜了。因為doc已經在記憶體裡了
1) 增加shards數及ES node數, 結果不是很明顯
2) 使用size, 發現只是展示的doc的數量變化, 對於速度無影響
3) terminate_after: 在每個shards上, 只search前N個doc, 不實際,無法保證結果。
4) 增加filter, 使得進行二次打分的doc數量極大的降低, 來提高速度。
-
IK分詞
對於string欄位, 預設使用的analyzer是standard,對中文會分成單字,效果不好。
對於title等欄位, 增加子欄位, fields: title.cn, 使用"analyzer": "ik"進行分析。
"mappings":{"my_type":{"properties":{"text":{"type":"string","fields"
ELK: Elasticsearch + Logstash + Kibana
Elasticsearch: 是一個分散式的、實時全文搜尋及分析引擎;檢索效能高效是最大的特色。
Logstas
ES站點外掛(以網頁形式展現)
1、BigDesk Plugin (作者 Lukáš Vlček)
簡介:監控es狀態的外掛,推薦!【目前不支援2.x】
2、Elasticsearch Head Plugin (作者 Ben Birch)
(主要)
text name default 轉變 業務層 核心 解耦 inf star
Spring.net兩大核心內容:
IOC(控制反轉)
傳統的面相對象思維模式是對象A依賴對象B,對象B的實例化和調用都在對象A中發生,一旦對象B中發生變化,對象A也要隨之變化,這樣使得 AD 升級 activedirectory DHCP 1. AD服務器相關配置信息1 2 1.1 系統版本角色名稱操作系統版本語言數量ADWindows server 2003 sp2CN2ADWindows server 2012 R2CN21.2 主機名和IP地址服務器主機名IP地 The getclass false not for internal 安全 mod word ELK的安裝非常簡單,解壓稍加配置即能用。
今天的重點是記錄ELK的安全認證,ELK安裝好後,ElasticSearch是可以直接瀏覽訪問的,非常不安全,Kibana也是一樣直接
Q:斐波那契數列為什麼那麼重要,所有關於數學的書幾乎都會提到? A:因為斐波那契數列在數學和生活以及自然界中都非常有用。
1. 斐波那契數列 概念引入
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家列昂納多·斐波那契(Leonar
一、概述
Storm是一個開源的分散式實時計算系統,可以簡單、可靠的處理大量的資料流。
Storm有很多使用場景:如實時分析,線上機器學習,持續計算,分散式RPC,ETL等等。
Storm支援水平擴充套件,具有高容錯性,保證每個訊息都會得到處理,而且處理速度很快(在一個小叢集中,每個
一、URI
1.1 定義
在電腦術語中,統一資源識別符號(Uniform Resource Identifier,即URI)是一個用於標識某一網際網路資源名稱的字串。 該種標識允許使用者對任何(包括本地和網際網路)的資源通過特定的協議進行互動操作。
1.2 組成
一般格式為:
MySQL字符集相關變數介紹及binlog中字符集相關缺陷分析
MySQL支援多種字符集(character set)提供使用者儲存資料,同時允許用不同排序規則(collation)做比較。
本文基於MySQL5.7介紹了字符集相關變數的使用,通過例子描述了
ijkPlayer主要包含了android, extra, ijkmedia, ios幾個核心原始碼目錄
android 目錄包括了android 平臺上層介面提供、用例等等
----ijkplayer:android 測試用例,直接匯入android studio後可以使 cake介紹
Cake 是.net平臺下的一款自動化構建工具,可以完成對.net專案的編譯,打包,執行單元測試,整合測試甚至釋出專案等等.如果有些特徵Cake沒有實現,我們還可以很容易地通過擴充套件Cake來實現我們想要的功能.
Cake有以下特點
1) 使用c#語言編寫,可以在Cake腳本里使用C#語言來實 ## 深度神經網路(DNN,Deep Neural Networks)簡介
首先讓我們先回想起在之前部落格([資料探勘入門系列教程(七點五)之神經網路介紹](https://www.cnblogs.com/xiaohuiduan/p/12623925.html))中介紹的神經網路:為了解決M-P模型中無法處 [toc]
#1 linq介紹
##1.1 linq產生背景
一個應用服務後臺程式,肯定會需要格式各樣的資料檢索跟操作,而這些資料在過去的這些年裡一般都會包含在關係型資料庫或者xml檔案中。
.Net3.5版本發行之前,傳統的資料來源訪問方式就是直接對資料庫或者xml檔案進行檢索操作。在.Net3.5 V ELK 日誌系統 CentOS7 Elasticsearch分布式集群 筆記內容:ELK介紹及搭建 Elasticsearch 分布式集群筆記日期:2018-03-02
27.1 ELK介紹
27.2 ELK安裝準備工作
27.3 安裝es
27.4 配置es
27.5 curl查看es集群
轉:http://blog.51cto.com/zero01/2079879
筆記內容:搭建ELK日誌分析平臺(上)—— ELK介紹及搭建 Elasticsearch 分散式叢集筆記日期:2018-03-02
27.1 ELK介紹
27.2 ELK安裝準備工作
27.3 安
java架構師、叢集、高可用、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰
視訊課程內容包含:
高階Java架構師包含:Spring boot、Spring
在瀏覽器與伺服器進行互動時,往往需要把涉及到的一些資料儲存下來,這時就需要使用cookie或session進行狀態管理。這篇文章先來說說session怎麼用,首先在servlet中建立一個session來儲存資訊,舉個例子,在做登陸驗證時,如果登陸成功,需要將使用者的資訊儲 配置文件 如何 states master 根目錄 一、什麽是Salt States?Salt States是Salt模塊的擴展,主系統使用的狀態系統叫SLS系統,SLS代表Saltstack State,Salt是一些狀態文件,其中包含有關如何配置Salt子節點的信息,這些狀態被存放在一 朋友 單節點 adb 一致性 公司 一個 memcache 消息通知 包括 今天和搜索部門一起做了一下MQ的遷移,順便交流一下業務和技術。發現現在90後小夥都挺不錯。我是指能力和探究心。我家男孩,不招女婿。
在前面的文章中也提到,我們有媒資庫(樂視視頻音頻本身內容) url 軟件包 三方庫 簡單的 lin 文件的 span 高級程序設計 擴展 1-1、Python簡介:
Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年 相關推薦
ELK之Elasticsearch介紹及在搜尋中的使用
Elasticsearch之外掛介紹及安裝
Spring.net介紹及MVC中應用
Windows 活動目錄(AD)服務器系統升級到2012之環境介紹及準備(一)
ELK之ElasticSearch 6.4.x安全認證Search Guard6
斐波那契數列介紹及Python中五種方法斐波那契數列
大資料之Storm介紹及原理
java中URI,URL,URL介紹及Android中Uri解析
MySQL · 捉蟲動態 · MySQL字符集相關變數介紹及binlog中字符集相關缺陷分析
ijkplayer入門之目錄介紹及編譯
.net持續整合cake篇之cake介紹及簡單示例
資料探勘入門系列教程(十點五)之DNN介紹及公式推導
linq介紹及工作中應用兩例——左聯與內聯,linq迴圈方法
ELK介紹及搭建 Elasticsearch 分布式集群
搭建ELK日誌分析平臺(上)—— ELK介紹及搭建 Elasticsearch 分散式叢集
架構師之路--搜尋業務和技術介紹及容錯機制高階教程
玩轉web之servlet(六)---session介紹及簡單使用(登入驗證中儲存資訊)
自動化運維之saltstack(二)states介紹及使用
架構師之路--搜索業務和技術介紹及容錯機制
Python零基礎學習系列之二--Python介紹及環境搭建