Elasticsearch之空搜索。

最基本的搜索API表單是空搜索(empty search),它沒有指定任何的查詢條件,只返回集羣索引中的所有文檔:

GET /_search

響應內容(爲了編輯簡潔)類似於這樣:

hits

        響應中最重要的部分是hits,它包含了total字段來表示匹配到的文檔總數,hits數組還包含了匹配到的前10條數據。

        hits數組中每個結果都包含_index、_type和文檔的_id字段,被加入到_source字段中這意味着在搜索結果中我們可以直接使用全部文檔。這不像其他搜索引擎只返回文檔ID,需要你單獨去獲取文檔。

        每個節點都有一個_source字段,這是相關性得分(relevance score),它衡量了文檔與查詢的匹配程度。默認的,返回結果中關聯性最大的文檔排在首位;這意味着,它是按照_source降序排列的。這種情況下,我們沒有指定任何查詢,所以所有文檔的相關性是一樣的,因此所有結果的_source都是取得一箇中間值 1。

        max_source指的是所有文檔匹配查詢中_source的最大值。

took

        took告訴我們整個搜索請求花費的毫秒數。

shards

        _shards節點告訴我們參與查詢的分片數(total字段),有多少是成功的(successful字段),有多少的是失敗的(failed字段)。通常我們不希望分片失敗,不過這個有可能發生。如果我們遭受一些重大的故障導致主分片和複製分片都故障,那這個分片的數據將無法響應給搜索請求。這種情況下,Elasticsearch將報告分片failed,但仍將繼續返回剩餘分片上的結果。

timeout

        time_out值告訴我們查詢超時與否。一般的,搜索請求不會超時。如果響應速度比完整的結果更重要,你可以定義timeout參數爲10或者10ms(10毫秒),或者1s(1秒)。

        GET /_search?timeout = 10ms

        Elasticsearch將返回在請求超時前收集到的結果。

        超時不是一個斷路器(circuit breaker)(注:關於斷路器的理解請看警告)。

        警告:需要注意的是timeout不會停止執行查詢,它僅僅告訴你目前順利返回結果的節點然後關閉連接。在後臺,其他分片可能依舊執行查詢,儘量結果已經被髮送。

        使用超時是因爲對於你的業務需求(注:SLA,Service-Level— Agreement服務等級協議)來說非常重要,而不是因爲你想中斷執行長時間運行的查詢。