国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ES數(shù)據(jù)庫】Elasticsearch安裝使用

這篇具有很好參考價值的文章主要介紹了【ES數(shù)據(jù)庫】Elasticsearch安裝使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、簡介

  • ElasticsearchMongoDB/Redis類似,是非關(guān)系型數(shù)據(jù)庫,從索引文檔到文檔能被搜索到只有一個輕微的延遲,是采用Restful API標(biāo)準(zhǔn)的可擴展和高可用的實時數(shù)據(jù)分析的全文搜索工具
  • Elastic Search的實現(xiàn)原理是,利用內(nèi)置分詞器(Analyzer)對數(shù)據(jù)庫文本進行分詞,將解析出的關(guān)鍵詞和數(shù)據(jù)庫文檔建立倒排索引。輸入的搜索文本也會進行分詞,通過倒排索引找到匹配的數(shù)據(jù)庫文本。之后使用 TF-IDF算法,根據(jù)相關(guān)度對每個匹配的文本進行評分排序,返回搜索結(jié)果。
    es數(shù)據(jù)庫安裝,Elasticsearch,elasticsearch,數(shù)據(jù)庫,大數(shù)據(jù)

二、ES數(shù)據(jù)庫特性

  • 可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網(wǎng)絡(luò)中就能自動加入當(dāng)前集群;本身就是開源軟件,也支持很多開源的第三方插件
  • 高可用:在一個集群(Cluster)多個節(jié)點(Node)中分布式存儲,索引(Index)支持分片(Shards)和復(fù)制(Replicas),即使部分節(jié)點down掉,也能自動進行數(shù)據(jù)恢復(fù)和主從切換
  • 采用RestfulAPI標(biāo)準(zhǔn):通過http接口使用JSON格式進行操作數(shù)據(jù);數(shù)據(jù)存儲的最小單位是文檔,本質(zhì)上是一個JSON 文本

三、與關(guān)系型數(shù)據(jù)庫的區(qū)別

  • 索引 Index:一個擁有幾分相似特征的文檔的集合
  • 類型 Type:索引可以為擁有相同字段的文檔定義一個類型;個索引中可以創(chuàng)建多個Type
  • 文檔 Document:一個文檔是一個可被索引的基礎(chǔ)信息單元
  • 字段 Field:Elasticsearch的最小單位,相當(dāng)于數(shù)據(jù)某一列
  • 映射 Mapping:所有的文檔在寫進索引之前都需要進行分析,如何將輸入的文本分隔為詞條,哪些詞條又會被過濾,這種行為叫做映射,一般由用戶自己定義相應(yīng)的規(guī)則
SQL數(shù)據(jù)庫(MySQL) NoSQL數(shù)據(jù)庫(ES)
數(shù)據(jù)庫 Database 索引 Index
表 Table 類型 Type
數(shù)據(jù)行 Row 文檔 Document
數(shù)據(jù)列 Column 字段 Field

四、ELK搭建

ELK = elasticsearch + logstash + kibana
ELK常作為大型分布式系統(tǒng)的日志分析收集處理的解決方案:

  • ElasticSearch是一個基于Lucene基礎(chǔ)上構(gòu)建的開源搜索工具,具備實時性、分布式、可擴展等優(yōu)點,并對Lucene進行了封裝,開發(fā)者通過RESTful API即可實現(xiàn)對數(shù)據(jù)的搜索;
  • logstash是一個用于日志搜集, 分析, 過濾的工具. client端一般部署在用于搜集日志的主機上, server端負(fù)責(zé)將接收的到日志進行過濾, 然后轉(zhuǎn)發(fā)到elasticsearch上;
  • kibana是一個用于匯總分析和搜索日志的工具, 可以為elasticsearch和logstash提供友好的日志分析的web界面;

在docker上搭建ELK,完成非關(guān)系型數(shù)據(jù)庫的構(gòu)建

  1. docker安裝教程:Install Docker Engine on CentOS
  2. ELK搭建教程:基于騰訊云服務(wù)器安裝ELK

常見問題

1. 生成注冊令牌

連接 Kibana 實例或在安全的 Elasticsearch 集群中注冊其他節(jié)點。
使用 elasticsearch-create-enrollment-token 工具創(chuàng)建注冊令牌。

2. 頁面數(shù)據(jù)查詢報406錯誤

ES-Head需要Restful接口

{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}

解決方法:

  • 進入docker容器
# 命令 docker exec -it 容器ID /bin/bash
[root@localhost ~]# docker exec -it es-head /bin/bash
  • cd進入_site/目錄,編輯vendor.js
[root@localhost ~]# vim _site/vendor.js

# 6886行: contentType: “application/x-www-form-urlencoded改成
# contentType: "application/json;charset=UTF-8"

# 7573行: var inspectData = s.contentType === “application/x-www-form-urlencoded” && 改成
# var inspectData = s.contentType === "application/json;charset=UTF-8" &&
3. kibana Unable to connect to Elasticsearch at http://elasticsearch:9200

重啟elk服務(wù)后,需要在kibana修改es的ip

解決方法:

  • 進入docker容器
# 命令 docker exec -it 容器ID /bin/bash
[root@localhost ~]# docker exec -it es-head /bin/bash
  • kibana的配置文件出了問題,所以要修改配置文件,找到kibana.yml,進入修改
vim  /etc/kibana/kibana.yml
# 將elasticsearch改為自己的ip
  • 重啟kibana

五、ES基本操作

1. ES數(shù)據(jù)庫建立
  • 把所有字段設(shè)置為 "index": "not_analyzed"
  • _source 打開,不用零散存儲每個字段,更高效
  • _all 關(guān)閉,因為檢索是基于 k=v 這樣字段已知的查詢的
{
    "properties":{
        "屬性": {
            "index": "not_analyzed",
            "type": "類型"
        }
    }
    "_source": {
        "enabled": true
    }, 
    "_all": {
        "enabled": false
    }
}

2. ES索引相關(guān)操作
添加索引
  • 請求形式 PUT
  • Content-Type: application/json
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}
{
    "settings":{
        "index":{
            "number_of_shards":"2", // 分片
            "number_of_replicas":"0", // 副本數(shù)
        }
    }
}
刪除索引
  • 請求形式 DELETE
  • Content-Type: application/json
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}
3. ES文檔相關(guān)操作
添加文檔
  • 請求形式 POST
  • Content-Type: application/json
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}
    /* id不是必填項,如果不傳,ES會給一個默認(rèn)值 */
{
    // 創(chuàng)建的文檔數(shù)據(jù)內(nèi)容
    "屬性1": "值1",
    "屬性2": "值2",
    "屬性3": "值3 ",
    "屬性4": "值4"
    ......
}
更新文檔(局部更新)
  • 請求形式 POST
  • Content-Type: application/json
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}/_update
    /* id是必填項 */
{
    // 更新的局部數(shù)據(jù)內(nèi)容
    // doc作為鍵的數(shù)據(jù)json串
    "doc": {
        "屬性1": "值1",
        "屬性2": "值2"
        .....
    }
}
刪除文檔
  • 請求形式 DELETE
  • Content-Type: application/json
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}
    /* id是必填項 */
查詢文檔
/* 簡易查詢 */
請求形式 GET
Content-Type: application/json

/* 通過id查詢,返回文檔全部字段 */
URL:  http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}

/* 通過id查詢,只返回文檔特定字段 */
URL:  http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}/_source?source=字段1,字段2

/* 全量查找,返回類型全部數(shù)據(jù) */
URL:  http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search

/* 簡易條件查詢,返回類型中符合條件的文檔 */
URL:  http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search?q=條件{字段: 值}


/* DSL搜索 */
請求形式 POST
Content-Type: application/json
URL:  http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search

/* 例如:查詢年齡為34的用戶數(shù)據(jù) */
JSON
{
    "query": {
        "match": {
            "age": 34
        }
    }
}

/* 例如:查詢年齡大于26歲且性別為男的用戶數(shù)據(jù) */
JSON
{
    "query": {
        "bool": {
            "filter": {
                "range": {
                    "age": {
                        "gt": 26
                    }
                }
            },
            "must": {
                "match": {
                    "sex": "男"
                }
            }
        }
    }
}

/* 例如:查詢名字為魏大勇和秀琴的用戶信息 */
JSON
{
    "query": {
        "match": {
            "name": "魏大勇 秀琴"
        }
    }
}

/* 查詢結(jié)果高亮顯示 */
/* 例如:查詢名稱為張三的用戶數(shù)據(jù) */
{
    "query": {
        "match": {
            "name": "張三"
        }
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}

/* 聚合操作(類似分組操作)*/
/* 例如:查詢各個年齡的用戶數(shù) */
{
    "aggs": {
        "all_interests": {
            "terms": {
                "field": "age.keyword"
            }
        }
    }
}
4. 元數(shù)據(jù)操作

文檔 (document) 的元數(shù)據(jù)(Metedata)

  • _index
    • document 存儲在哪個 index 中
    • 類似的文檔(document)放在同一個 index ,不同類型的文檔放在不同的 index
    • index 名稱必須小寫,不用下劃線(_)開頭,不含逗號
  • _type
    • 代表 document 屬于 index 下的哪個類型(type)
    • 一個 index 通常包含多個 type
    • type 名稱可大小寫,不用下劃線(_)開頭,不含逗號
  • _id
    • 代表 document 唯一標(biāo)識,與index和type一起確定一個唯一的document
    • id 生成方式
      • 手動指定:PUT /index/type/id
      • 自動生成: PUT /index/type/ (base64編碼20長度字符串,分布式集群下不可能重復(fù))
  • _score
    • 相關(guān)度分?jǐn)?shù):匹配程度,分?jǐn)?shù)越高越相關(guān)
查詢響應(yīng)

返回結(jié)果做JSON格式化操作

  • 請求形式 GET POST
  • 參數(shù):?pretty // url結(jié)尾加上參數(shù)
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}?pretty
判斷某個文檔是否存在,不查詢它的內(nèi)容
  • 請求形式 HEAD
  • URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/{id}
  • 返回: 200 OK; 404 Not Found
批量查詢
/* 例如:查詢id為1002和1003的文檔數(shù)據(jù) */
請求形式 POST
參數(shù):_mget // url結(jié)尾加上參數(shù)
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_mget

JSON
{
    "ids":["1002","1003"]
}
批量添加
請求形式 POST
參數(shù):_bulk // url結(jié)尾加上參數(shù)
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_bulk

JSON // 注意:每條數(shù)據(jù)后需要加換行,最后一行也要加
{action:{metedata}}\n
{source body}\n
{action:{metedata}}\n
{source body}\n
......

/* 例如:新增三條數(shù)據(jù) */
{"create":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_1}"}}
{"id":"1006","name":"user001","age":20,"sex":"男"}
{"create":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_2}"}}
{"id":"1007","name":"user002","age":30,"sex":"男"}
{"create":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_3}"}}
{"id":"1008","name":"user003","age":40,"sex":"女"}

/* 例如:批量刪除三條數(shù)據(jù) */
{"delete":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_1}"}}
{"delete":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_2}"}}
{"delete":{"_index":"{索引名稱}","_type":"{類型}","_id":"{id_3}"}}
5. 分頁操作

ES搜索默認(rèn)最多返回10條數(shù)據(jù),需要分頁返回

請求形式 POST
參數(shù): ?size=n1&from=n2
    size: 每頁顯示的結(jié)果數(shù)量
    from: 跳過多少結(jié)果數(shù)
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search?size=3&from=0

/* 每頁顯示四條數(shù)據(jù),顯示第二頁 */
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search?size=4&from=4
6. 映射操作

如果沒有指定字段類型,ES會默認(rèn)給字段賦上相應(yīng)類型

ES支持的基本數(shù)據(jù)類型:文章來源地址http://www.zghlxwxcb.cn/news/detail-764060.html

  • 字符串:
    • text:存儲數(shù)據(jù)時,會自動分詞,并生成索引
    • keyword:存儲數(shù)據(jù)時,不會分詞,直接整個詞去建索引
  • 整數(shù) : byte, short, integer, long
  • 浮點數(shù) : float、double
  • 布爾型 : boolean
  • 日期 : date
/* 創(chuàng)建索引的映射信息 */
請求形式 PUT
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}

JSON
{
    "settings": {
        "index": {
            "number_of_shards": 2,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "properties": {
            "name": {
                "type": "text"
            },
            "age": {
                "type": "integer"
            },
            "email": {
                "type": "keyword"
            },
            "hobby": {
                "type": "text"
            }
        }
    }
}

/* 查詢索引的映射信息 */
請求形式 GET
參數(shù): _mapping
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/_mapping
7. 結(jié)構(gòu)化查詢
/* term查詢 - 用于精確匹配某些值 */
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢年齡為26的數(shù)據(jù)信息 */
JSON
{
    "query": {
        "term": {
            "age": 26
        }
    }
}


/* terms查詢 - 和term類似,但terms允許指定多個匹配條件 */
/* 某個字段指定了多個值,那么文檔需要一起去匹配 */
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢年齡為26和30的用戶數(shù)據(jù)信息 */
JSON
{
    "query": {
        "term": {
            "age": [26, 30]
        }
    }
}

/* range查詢 - 允許按照指定的范圍查找數(shù)據(jù) */
請求形式 POST
范圍操作符:
    gt:大于
    gte:大于等于
    lt:小于
    lte:小于等于
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢年齡大于等于26小于30的用戶數(shù)據(jù)信息 */
JSON
{
    "query": {
        "term": {
            "age": {
                "gte": 26,
                "lt": 30
            }
        }
    }
}


/* exists查詢 - 用于查找文檔中是否包含指定字段/沒有某個字段,類似SQL的is null */
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢包含title字段的數(shù)據(jù) */
JSON
{
    "query": {
        "exists": {
            "field":"title"
        }
    }
}


/* match查詢 - 全文本查詢(模糊)以及精確查詢都可以用 */
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢名字中帶“云”字的數(shù)據(jù)信息 */
JSON
{
    "query": {
        "match": {
            "name": "云"
        }
    }
}

/* bool查詢 - 合并多個條件的查詢結(jié)果的布爾邏輯 */
請求形式 POST
操作符:
    must:多個查詢條件完全匹配,AND
    must_not:多個查詢條件的相反匹配,NOT
    should:至少有一個查詢條件匹配,OR
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢用戶性別為男的且年齡不大于30歲的數(shù)據(jù) */
JSON
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "sex": "男"
                }
            },
            "must_not": {
                "range": {
                    "age": {
                        "gt": 30
                    }
                }
             }
        }
    }
}


/* filter查詢 - 其他查詢都需要計算查詢結(jié)果的匹配程度,即元數(shù)據(jù)_source */
/* 過濾查詢不考慮_source,且可以緩存查詢結(jié)果,提升速度 */
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/{類型}/_search
/* 例如:查詢年齡為26歲的用戶數(shù)據(jù) */
JSON
{
    "query": {
        "bool": {
            "filter": {
                "term": {
                    "age": 26
                }
            }
        }
    }
}
8. IK Analyse
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/_analyze

/* 英文分詞 */
JSON
{
    "analyzer": "standard",  // 默認(rèn)英文分詞器
    "text": "hello world"    // 分詞文本
}

/* 中文分詞 */
JSON
{
    "analyzer": "ik_max_word",  //ik中文分詞器名稱為ik_max_word
    "text": "你好,中國"          // 分詞文本
}
9. 全文檢索
請求形式 POST
URL: http://{ELK服務(wù)地址}:9200/{索引名稱}/_search

/* 單詞查詢 */
JSON
{
    // hobby這個field匹配 籃球 這個單詞
    "query": {
        "match": {
            "hobby": "籃球"
        }
    },
    // 結(jié)果高亮
    "highlight": {
        "fields": {
            "hobby": {}
        }
    }
}

/* 多詞查詢 - 匹配多個單詞 */
JSON
{
    // hobby這個field匹配 籃球 足球 這兩個單詞
    "query": {
        "match": {
            "hobby": "籃球 足球"
        }
    },
    // 結(jié)果高亮
    "highlight": {
        "fields": {
            "hobby": {}
        }
    }
}

/* 多詞查詢 - 同時匹配多個單詞 */
JSON
{
    // hobby這個field同時匹配 籃球和足球 這兩個單詞
    "query": {
        "match": {
            "hobby": {
                "query": "籃球 足球",
                "operator":"and" // AND OR兩種情況
            }
        }
    },
    // 結(jié)果高亮
    "highlight": {
        "fields": {
            "hobby": {}
        }
    }
}


/* 多詞查詢 - 設(shè)置匹配度40%進行查詢 */
JSON
{
    // hobby這個field同時匹配 籃球和足球 這兩個單詞
    "query": {
        "match": {
            "hobby": {
                "query": "籃球 足球",
                "minimum_should_match":"40%" // 設(shè)置匹配度,_source分?jǐn)?shù)越高匹配度越大
            }
        }
    },
    // 結(jié)果高亮
    "highlight": {
        "fields": {
            "hobby": {}
        }
    }
}

到了這里,關(guān)于【ES數(shù)據(jù)庫】Elasticsearch安裝使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包