Elasticsearch學習筆記1

啓動es:

/bin/elasticsearchhtml

瀏覽器訪問: http://localhost:9400/_count?pretty請求文檔數量,?pretty表示格式化輸出web

一個 Elasticsearch 集羣能夠 包含多個索引 ,相應的每一個索引能夠包含多個類型。 這些不一樣的類型存儲着多個文檔 ,每一個文檔又有多個屬性數據庫

索引(名詞):數組

如前所述,一個 索引 相似於傳統關係數據庫中的一個 數據庫 ,是一個存儲關係型文檔的地方。 索引 (index) 的複數詞爲 indices 或 indexes 。

索引(動詞):瀏覽器

索引一個文檔 就是存儲一個文檔到一個 索引 (名詞)中以便它能夠被檢索和查詢到。這很是相似於 SQL 語句中的 INSERT 關鍵詞,除了文檔已存在時新文檔會替換就文檔狀況以外。

倒排索引:併發

關係型數據庫經過增長一個 索引 好比一個 B樹(B-tree)索引 到指定的列上,以便提高數據檢索速度。Elasticsearch 和 Lucene 使用了一個叫作 倒排索引 的結構來達到相同的目的。

一個文檔必須包含三個元數據:elasticsearch

_index 索引
_type 對象類別
_id 文檔標識

文檔增刪改查

增長

POST http://localhost:9400/megacorp/employee/1
{
	"first_name" :  "Douglas",
	"last_name" :   "Fir",
   	"age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

若是指定的ID的文檔已經存在的話,將會覆蓋這個ID的文檔數據分佈式

若是數據沒有天然的ID,ElasticSearch能夠自動生成ID,這時應該以下增長數據:ide

POST http://localhost:9400/megacorp/employee/
{
  "title": "My second blog entry",
  "text":  "Still trying this out...",
  "date":  "2014/01/01"
}

若是想在對應的ID不存在時才進行索引文檔的話,增長_create或者設置op_type爲create以下操做:ui

POST http://localhost:9400/megacorp/employee/1/_create 
 or 
POST http://localhost:9400/megacorp/employee/1/_create?op_type=create

修改

同建立時的PUT方法,增長_update表示更新文檔一部分 能夠增長?version參數進行併發下的衝突處理

POST /website/blog/1/_update
{
	"doc" : {
      "tags" : [ "testing" ],
	  "views": 0
   }
}

刪除

DELETE http://localhost:9400/megacorp/employee/1

查找

GET http://localhost:9400/megacorp/employee/_search

搜索

檢查文檔是否存在

HEAD /megacorp/employee/1

Query-string搜索

GET /megacorp/employee/_search

返回結果放在數組 hits 中。一個搜索默認返回十條結果。

能夠將簡單的搜索條件放到url中:

GET http://localhost:9400/megacorp/employee/_search?q=first_name:John

查詢表達式

簡單查詢

GET /megacorp/employee/_search
{
	"query" : {
    	"match" : {
        	"last_name" : "Smith"
        }
	}
}

增長過濾查詢

GET /megacorp/employee/_search
{
	"query" : {
    	"bool": {
        	"must": {
            	"match" : {
               	 "last_name" : "smith" 
	            }
            },
    	    "filter": {
        	    "range" : {
            	    "age" : { "gt" : 30 } 
                }	
	        }
    	}
    }
}

短語匹配match_phrasematch的區別:match_phrase會明確匹配查詢的條件,不會進行分詞查詢,match會分詞查詢

高亮查詢

查詢結果會在句子中匹配的詞組增長<em>標籤包裹,

詳細高亮查詢:高亮查詢

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

查詢能夠指定timeout時間

GET /_search?timeout=10ms

查詢分頁

GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10

在分佈式系統中深度分頁

理解爲何深度分頁是有問題的,咱們能夠假設在一個有 5 個主分片的索引中搜索。 當咱們請求結果的第一頁(結果從 1 到 10 ),每個分片產生前 10 的結果,而且返回給 協調節點 ,協調節點對 50 個結果排序獲得所有結果的前 10 個。

如今假設咱們請求第 1000 頁--結果從 10001 到 10010 。全部都以相同的方式工做除了每一個分片不得不產生前10010個結果之外。 而後協調節點對所有 50050 個結果排序最後丟棄掉這些結果中的 50040 個結果。

能夠看到,在分佈式系統中,對結果排序的成本隨分頁的深度成指數上升。這就是 web 搜索引擎對任何查詢都不要返回超過 1000 個結果的緣由。

相關文章
相關標籤/搜索