擷取是指的是擷取指定id的記錄,這和查詢稍微有些差别,那麼在擷取記錄的過程中有哪些知識點呢?
首先要知道
GET twitter/_doc/0
就是擷取twitter索引中id為0的記錄,這就是标準的用法,同時可以使用
HEAD twitter/_doc/0
判斷這條記錄是否存在。
實時性
在請求中可以加上請求參數realtime,realtime的值預設為true,也就表示甭管這條記錄有沒有被重新整理refresh,都可以擷取到,不受es預設refresh的重新整理頻率1s的影響,如果這時候記錄被更改但是還沒有被refresh,如果這時候進行了查詢操作,不好意思,查到的是舊的文檔。但是,在本文的擷取操作get中則仍然可以擷取到最新的文檔,就是這個realtime參數所起的作用。
如果關閉了realtime,設定為false,那就隻能依靠es的refresh重新整理頻率了。
source字段的過濾
例如:
127.0.0.1:9200/my_index/doc/1?_source=title
,可以篩選指定的source字段,多字段以逗号分隔。
其中
_source
也可以替換為
_source_include
或者
_source_exclude
分别代表篩選和排除的字段
隻擷取source字段
有時候在實際操作時,我們隻需要source字段就可以了,其他的索引資訊啥的都不怎麼需要,這時候就可以使用
GET twitter/_source/1
直接擷取source字段,但是,此方法貌似隻能在6.x版本生效,我本地的5.6版本的es無法支援,加上doc_type補全路徑也不行。
存儲字段
在建立索引之初或者建立doc_type之初,可以指定一個字段的store的屬性(true or false),且隻能對葉子節點生效,例如說一個字段為
"info:{"age":10}"
,這種情況下隻能對age設定store屬性,不能對info設定。
有了這個屬性,在擷取時就可以使用
stored_fields=xxxx,yyyy
等方法擷取指定的字段。