1. 程式人生 > >Elasticsearch 管理文件

Elasticsearch 管理文件

ES支援近實時的索引、更新、查詢、刪除文件,近實時就意味著剛剛索引的資料需要1秒鐘後才能搜尋到,這也是與傳統的SQL資料庫不同的地方。

索引/替換文件

之前已經試過如何索引一個文件了,這裡再複習一下:

curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'

上面的例子中,建立了一個索引為customer,型別為external,id為1的文件。

當再次執行命令:

curl -XPUT 'localhost:9200/customer/external/1?pretty
' -d ' { "name": "Jane Doe" }'

之前的第一個文件就被覆蓋掉了。

如果指定新的文件id,那麼舊的文件仍然存在:

curl -XPUT 'localhost:9200/customer/external/2?pretty' -d '
{
  "name": "Jane Doe"
}'

索引的時候ID是可選的,如果不指定ID,ES會隨機生成一個ID,並使用這個ID索引文件資料。

curl -XPOST 'localhost:9200/customer/external?pretty' -d '
{
  "name": "Jane Doe
" }'

需要注意的是,如果不指定ID,那麼需要使用POST命令,而不是PUT。

更新文件

除了索引和替換文件,ES還支援更新文件。更新文件其實是先刪除舊的文件,再索引新的文件。

如果想要更新文件內容,可以按照下面的方式進行:

curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
  "doc": { "name": "Jane Doe" }
}'

由於是先刪除再索引,因此可以額外增加新的欄位:

curl -XPOST 'localhost:9200/customer/external/1/_update?pretty
' -d ' { "doc": { "name": "Jane Doe", "age": 20 } }'

當然也支援使用指令碼進行更新:

curl -XPOS
T 'localhost:9200/customer/external/1/_update?pretty' -d ' { "script" : "ctx._source.age += 5" }'

其中ctx._source代表了當前的文件,上面的意思 是 在當前文件的基礎上age加5.

刪除文件

刪除文件就很簡單了,只需要指定文件的索引、型別、ID就行了:

curl -XDELETE 'localhost:9200/customer/external/2?pretty'

批量操作

除了索引、替換、更新和刪除,ES為了減少來回的響應資訊,可以一次性執行多個命令,最後統一返回執行結果。

例如:

curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'

上面的命令可以同時插入兩條資料。

_bulk命令不僅僅支援單個命令執行多條,還只是多種不同的命令執行多條。

curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'

上面的命令中,先更新id為1的文件,再刪除id為2的文件。

如果bulk中的某一個命令執行出錯,那麼會繼續執行後面的命令,最後在命令返回時,會返回每個命令的執行結果。