##Routing a document to a shard shard = hash(routing) % number_of_primary_shards 經過散列函數,計算出document存儲的主分片,因此主分片數不能被修改。 routing默認是_id,也能夠自定義(傳參routing)。mysql
##creating,indexing,deleting a document 可選參數sql
##retrieving a document數組
##searchingapp
GET /_search?timeout=10ms 這裏的timeout不會中止查詢的執行,而是告訴分片把到timeout爲止的數據返回並斷開鏈接,雖然分片已經返回結果可是在後臺分片可能仍然在處理查詢。負載均衡
GET /index1,index2/type1,type2/_search異步
深分頁問題(deep paging) """ GET /_search?size=10&from=10000 """ 也就是搜索10條一頁,返回第10001到10010條數據,這時index的每一個分片都須要搜索top 10010條數據,而後合併排序再返回第10001到10010條數據,實際上另外的(number_of_primary_shards * 10010) - 10條數據都只是中間數據,只有10條數據是有效結果,因此搜索成本(cost)很大,應該儘可能避免這樣的查詢。async
_all Field 當索引一個document時,es會把全部的field的值鏈接起來組成一個大的字符串(big string),而後做爲_all的值,當查詢不指定field時,es會使用_all來查詢。函數
##分詞analysisfetch
##mappingcode
field types
string mapping
mapping在建立索引的時候指定 """ PUT /index { "mappings":{ "type_name":{ "properties":{ "field":{ "type":"string", "index":"not_analyzed" } } } } } """ mapping中已經存在的field不能被修改,但能夠新增field """ PUT /index/_mapping/type_name { "properties":{ "field_new":{ "type":"string", "index":"not_analyzed" } } } """
array 數組的元素的類型必須一致,es會以數組的第一個元素的類型做爲這個field的類型,數組是無序的。
Empty field
##Query DSL
performance
term filter 精確匹配field """ {"term":{"field":"value"}} """
terms filter 多值精確匹配field """ {"terms":{"field":["value1","value2","value3"]}} """
range,exists,missing,bool
match 可用於全文搜索,也可用於精確搜索。
檢驗query """ GET /index/type/_validate/query?explain {...} """ explain參數,能夠返回錯誤緣由。
##排序
默認按_score降序;其餘field默認升序
{"sort":{"date":{"order":"desc"}}}
多值的field mode:min,max,avg,sum
分詞與不分詞並存 """ "field":{ "type":"string", "analyzer":"english", "fields":{ "raw":{ "type":"string", "index":"not_analyzed" } } } """ 使用 field.raw
對分詞的field排序會很是耗內存
相關度計算 TF/IDF:在一個document的field中的詞頻/在index的文檔中出現的頻率
fielddata
##distributed search execution
結果跳躍(bouncing results problem) 由於主從分片同步延遲,使從主分片讀和從副本分片讀的結果不同。 使用preference參數能夠控制從哪一個分片或者節點搜索。
timeout 指定等待分片返回結果的時間,若是超時,分片立刻返回已經搜索到的結果。
routing 指定分片路由
search_type
scan,scroll