Elasticsearch基礎(chǔ)語(yǔ)法記錄

本文示例從《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"
}

二、查詢(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é)果中包含rockclimbingrock 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)系
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。