Elasticsearch 提供了近实时的操纵数据和搜索的能力。默认情况下,从您 index/update/delete 数据时到搜索结果中出现会有 1 秒的延迟(刷新间隔)。这是从其他平台例如 SQL 其中一个事务完成后数据是立即可用的一个重要区别。
我们先前看到过我们是如何索引单个文档的。让我们再次调用该命令 :
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -d'
{
"name": "John Doe"
}'
同样,上面的命令将索引指定的文档到 customer 索引,external 类型,ID 为 1 中。如果我们稍候使用不同的(或者相同的)文档来执行上面的命令,Elasticsearch 将在已存在的 ID 为 1 的文档替换(例如,reindex)成一个新的文档。
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -d'
{
"name": "Jane Doe"
}'
上面将 ID 为 1 文档的名字从 “John Doe” 改成 “Jane Doe”。如果,在另一方面,我们使用不同的 ID,一个新的文档将会被索引并且已存在的文档仍然在索引中保持不变。
curl -XPUT 'localhost:9200/customer/external/2?pretty&pretty' -d'
{
"name": "Jane Doe"
}'
上面将索引一个 ID 为 2 的新文档。
在索引时,ID 是可选项的一部分。如果不指定,Elasticsearch 将生产一个随机 ID,然后使用它去索引文档。Elasticsearch 生成的真实的 ID(或者我们在先前的例子中明确的指定)将作为索引 API 调用的一部分返回。
该例子演示了在没有明确的 ID 的情况下如何去索引一个文档 :
curl -XPOST 'localhost:9200/customer/external?pretty&pretty' -d'
{
"name": "Jane Doe"
}'
注意,在上述的情况下,我们使用了 POST 动作,而不是 PUT,因为我们没有指定 ID。