Elasticsearch dsl 搜尋返回結果的認識
阿新 • • 發佈:2018-12-08
{ "took": 36, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 13832623, "max_score": 1, "hits": [ { "_index": "csc-pacific-case-monitor", "_type": "case-monitor", "_id": "36501235", "_score": 1, "_source": { "caseId": "36501235", "addTime": 1537100536000, "caseTypeId": "407", "closerId": "20669", "closeTime": 1537100549000, "contactNumber": "[\"\",\"18151430301\"]", "content": "騎手問題:騎手來電就掛了\n騎手訴求:\n訂單號:", "creatorId": "20669", "customerId": "3204563", "customerType": "3001", "deadline": 1537186936000, "feedbackTime": null, "businessId": "56", "businessName": null, "fourthCategoryId": null, "fifthCategoryId": null, "ownerId": "20669", "managerId": "20669", "questionId": "35183", "questionReasonId": null, "orderTypeId": "352", "source": "1", "statusId": "2", "subSource": "-1", "questionTypeId": "16084", "updateTime": 1537100549000, "startTime": 1537100536000, "priorityId": "5", "updaterId": "20669", "memo": null, "flowId": "334", "nodeId": "64453", "lifeCycle": "1", "latest_main_scn": 4900981072207, "latest_main_es_update_time": 1537100549583, "level_1": "1", "level_2": "3", "level_3": "6", "level_4": "13", "level_5": "45", "level_6": "589", "departmentId": 589 } },
hits編輯
返回結果中最重要的部分是 hits
,它 包含 total
欄位來表示匹配到的文件總數,並且一個 hits
陣列包含所查詢結果的前十個文件。
在 hits
陣列中每個結果包含文件的 _index
、 _type
、 _id
,加上 _source
欄位。這意味著我們可以直接從返回的搜尋結果中使用整個文件。這不像其他的搜尋引擎,僅僅返回文件的ID,需要你單獨去獲取文件。
每個結果還有一個 _score
_score
降序排列的。在這個例子中,我們沒有指定任何查詢,故所有的文件具有相同的相關性,因此對所有的結果而言 1
是中性的 _score
。
max_score
值是與查詢所匹配文件的 _score
的最大值。
took編輯
took
值告訴我們執行整個搜尋請求耗費了多少毫秒。
shards編輯
_shards
部分 告訴我們在查詢中參與分片的總數,以及這些分片成功了多少個失敗了多少個。正常情況下我們不希望分片失敗,但是分片失敗是可能發生的。如果我們遭遇到一種災難級別的故障,在這個故障中丟失了相同分片的原始資料和副本,那麼對這個分片將沒有可用副本來對搜尋請求作出響應。假若這樣,Elasticsearch 將報告這個分片是失敗的,但是會繼續返回剩餘分片的結果。
timeout編輯
timed_out
值告訴我們查詢是否超時。預設情況下,搜尋請求不會超時。 如果低響應時間比完成結果更重要,你可以指定 timeout
為 10 或者 10ms(10毫秒),或者 1s(1秒):
GET /_search?timeout=10ms
在請求超時之前,Elasticsearch 將會返回已經成功從每個分片獲取的結果。
應當注意的是 timeout
不是停止執行查詢,它僅僅是告知正在協調的節點返回到目前為止收集的結果並且關閉連線。在後臺,其他的分片可能仍在執行查詢即使是結果已經被髮送了。
使用超時是因為 SLA(服務等級協議)對你是很重要的,而不是因為想去中止長時間執行的查詢。