索引-index:一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字
類型-type:一個類型是你的索引的一個邏輯上的分類/分區,其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客平台並且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客數據定義另一個類型
文檔-document:一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(Javascript Object Notation)格式來表示。許多條 Document 構成了一個 Index,可以是json格式
Node 與 Cluster:
Elastic 本質上是一個分布式數據庫,允許多台服務器協同工作,每台服務器可以運行多個 Elastic 實例。
單個 Elastic 實例稱為一個節點(node)。一組節點構成一個集群(cluster)。
curl -X PUT 'localhost:9200/xxx'
curl -X DELETE 'localhost:9200/weather'
2新增記錄
curl -X PUT 'localhost:9200/hupu/xxx/1' -d ' { "title": "怎么選?", "readnum": "43243", "likenum": "3124" }'
id可以指定,可以不指定;id不一定是數字,也可以是字符串
3.查看記錄
curl 'localhost:9200/hupu/xxx/1?pretty=true'
4刪除記錄
curl -X DELETE 'localhost:9200/hupu/xxx/1'
5更新記錄
curl -X PUT 'localhost:9200/hupu/xxx/1' -d ' {
"title": "怎么選?", "readnum": "43243", "likenum": "3124"}'
6返回所有記錄
curl 'localhost:9200/hupu/xxx/_search'
took字段表示該操作的耗時(單位為毫秒),timed_out字段表示是否超時,hits字段表示命中的記
total:返回記錄數,本例是2條。max_score:最高的匹配程度,本例是1.0。hits:返回的記錄組成的數組。
返回的記錄中,每條記錄都有一個_score字段,表示匹配的程序,默認是按照這個字段降序排列。
7 全文搜索
Elastic 的查詢非常特別,使用自己的查詢語法,要求 GET 請求帶有數據體。
$ curl 'localhost:9200/accounts/person/_search' -d ' { "query" : { "match" : { "desc" : "軟件" }} }'
上面代碼使用 Match 查詢,指定的匹配條件是desc字段里面包含"軟件"這個詞。返回結果如下。
{ "took":3, "timed_out":false, "_shards":{"total":5,"successful":5,"failed":0}, "hits":{ "total":1, "max_score":0.28582606, "hits":[ { "_index":"accounts", "_type":"person", "_id":"1", "_score":0.28582606, "_source": { "user" : "張三", "title" : "工程師", "desc" : "數據庫管理,軟件開發" } } ] } }
Elastic 默認一次返回10條結果,可以通過size字段改變這個設置。
$ curl 'localhost:9200/accounts/person/_search' -d ' { "query" : { "match" : { "desc" : "管理" }}, "size": 1 }'
上面代碼指定,每次只返回一條結果。
還可以通過from字段,指定位移。
$ curl 'localhost:9200/accounts/person/_search' -d ' { "query" : { "match" : { "desc" : "管理" }}, "from": 1, "size": 1 }'
上面代碼指定,從位置1開始(默認是從位置0開始),只返回一條結果。
8邏輯運算如果有多個搜索關鍵字, Elastic 認為它們是or關系。
$ curl 'localhost:9200/accounts/person/_search' -d ' { "query" : { "match" : { "desc" : "軟件 系統" }} }'
上面代碼搜索的是軟件 or 系統。
如果要執行多個關鍵詞的and搜索,必須使用布爾查詢。
$ curl 'localhost:9200/accounts/person/_search' -d ' { "query": { "bool": { "must": [ { "match": { "desc": "軟件" } }, { "match": { "desc": "系統" } } ] } } }'
