本文示例從《Elasticsearch權(quán)威指南》獲取,僅作為讀書(shū)筆記。如需要查看詳情,可以查看該書(shū)的具體內(nèi)容。
一、查看ES是否啟動(dòng)成功
GET localhost:9200/?pretty
{
"name": "DESKTOP-8MG3VHL",
"cluster_name": "elasticsearch",
"cluster_uuid": "zmUJSU-FSkKrLG5UhXrBwQ",
"version": {
"number": "7.6.2",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date": "2020-03-26T06:34:37.794943Z",
"build_snapshot": false,
"lucene_version": "8.4.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
- 以下示例省略:http://localhost:9200
二、查詢(xún)文檔數(shù)量
GET /_count?pretty
{
"count": 20,
"_shards": {
"total": 4,
"successful": 4,
"skipped": 0,
"failed": 0
}
}
同樣效果
GET /_count?pretty
{
"query":{
"match_all":{}
}
}
三、基礎(chǔ)操作
elasticsearch操作基于restful api進(jìn)行操作,所以在操作的過(guò)程中需要注意
請(qǐng)求方法
1、添加文檔
PUT /megacory/employee/1
{
"first_name":"John",
"last_name":"Smith",
"age":25,
"about":"I love to go rock climbing",
"interests":["sports","music"]
}
2、獲取文檔
GET /megacory/employee/1
{
"_index" : "megacorp",
"_type" : "employee",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
}
3、刪除文檔
DELETE /megacory/employee/1
- 如果我們要編輯數(shù)據(jù),可以使用
PUT
方法進(jìn)行更新操作。
4、搜索指定index、type的所有文檔信息
GET /megacory/employee/_search
5、搜索指定關(guān)鍵字的內(nèi)容
GET /megacory/employee/_search?last_name:Smith
四、DSL語(yǔ)句查詢(xún)(Domain Specific Language)
1、基于match
關(guān)鍵字查詢(xún)
GET /megacory/employee/_search
{
"query":{
"match":{
"last_name":"Smith"
}
}
}
2、通過(guò)filter
過(guò)濾查詢(xún)
GET /megacory/employee/_search
{
"filtered":{
"filter":{
"range":{
"age":{"gt":30}
}
},
"query":{
"match":{
"last_name":"Smith"
}
}
}
}
filtered
關(guān)鍵字對(duì)query
查詢(xún)出的數(shù)據(jù)用filter
中的條件進(jìn)行過(guò)濾,查詢(xún)出age
大于30
的數(shù)據(jù)
五、全文檢索
elasticsearch通過(guò)
_score
的方式進(jìn)行搜索匹配度排序,分值越高的越靠前
GET /megacory/employee/_search
{
"query":{
"match":{
"about":"rock climbing"
}
}
}
搜索出多條記錄,按照
_score
進(jìn)行排序。此時(shí)查詢(xún)的結(jié)果中包含rock
、climbing
、rock climbing
的都會(huì)被查詢(xún)出來(lái)
六、短語(yǔ)搜索
GET /megacory/employess/_search
{
"query":{
"match_phrase":{
"about":"rock climbing"
}
}
}
通過(guò)
短語(yǔ)搜索
關(guān)鍵字match_phrase
進(jìn)行匹配時(shí),匹配的內(nèi)容嚴(yán)格按照rock climbing
進(jìn)行匹配,匹配過(guò)程中不會(huì)把關(guān)鍵字進(jìn)行拆分。
七、高亮搜索關(guān)鍵字
GET /megacory/employess/_search
{
"query":{
"match_phrase":{
"about":"rokc climbing"
}
},
"highlight":{
"fields":{
"about":{}
}
}
}
通過(guò)關(guān)鍵字
highlight
進(jìn)行高亮顯示設(shè)置。當(dāng)設(shè)置了高亮屬性后,查詢(xún)結(jié)果會(huì)給關(guān)鍵字加上<em></em>
標(biāo)簽
八、聚合分析
聚合分析通過(guò)關(guān)鍵字
agg
進(jìn)行操作。
1、根據(jù)某個(gè)字段統(tǒng)計(jì)
GET /megacory/employees/_search
{
"aggs":{
"all_interests":{
"terms":{
"field":"interests"
}
}
}
}
-
aggs
聚合分析操作關(guān)鍵字 -
all_interests
自定義返回結(jié)果key -
term
指定需要分析的字段名
- 返回結(jié)果:
{
"aggregations": {
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "forestry",
"doc_count": 1
},
{
"key": "sports",
"doc_count": 1
}
]
}
}
}
- 結(jié)果中默認(rèn)生成以
doc_count
為key的文檔統(tǒng)計(jì)數(shù)量,該統(tǒng)計(jì)數(shù)量對(duì)應(yīng)指定field -
aggregations
返回分析結(jié)果 -
buckets
返回結(jié)果集
2、在查詢(xún)結(jié)果中進(jìn)行聚合分析
通過(guò)一定條件進(jìn)行過(guò)濾,再把過(guò)濾出來(lái)的數(shù)據(jù)進(jìn)行聚合分析。例子:統(tǒng)計(jì)last_name為smith的用戶(hù)興趣愛(ài)好
GET /megacory/employee/_search
{
"query":{
"match":{
"last_name":"smith"
}
},
"aggs":{
"all_interests":{
"terms":{
"field":"interests"
}
}
}
}
3、聚合分級(jí)匯總
基于聚合統(tǒng)計(jì)數(shù)據(jù)再進(jìn)行統(tǒng)計(jì)匯總。例子:根據(jù)interests field進(jìn)行匯總,并統(tǒng)計(jì)匯總中所有人的平均年齡。
GET /megacory/emloyee/_search
{
"aggs":{
"all_interests":{
"terms":{"field":"interests"},
"aggs":{
"avg_age":{
"avg":{"field":"age"}
}
}
}
}
}
-
avg
求指定field的平均值 - 注意
aggs
層級(jí)關(guān)系