Performance 通过别名更新Elasticsearch中单个文档的最有效方法
我有一个Elasticsearch设置,别名指向许多索引。我需要更新单个文档,但我不知道它位于哪个索引中 在我看来,有两种方法可以实现这一目标:Performance 通过别名更新Elasticsearch中单个文档的最有效方法,performance,
elasticsearch,Performance,
elasticsearch,我有一个Elasticsearch设置,别名指向许多索引。我需要更新单个文档,但我不知道它位于哪个索引中 在我看来,有两种方法可以实现这一目标: _按查询更新\u: 读取(返回特定索引),然后写入: 哪种方法更有效 首选哪种方法 有比这两种方法更好的方法吗?两种方法的性能相同,但有一点不同,第一种方法只需要发送一个请求,而第二种方法只需要发送两个请求,因此最好使用第一种方法,因为这样可以将API调用减少一半。 在我看来,第一种方法更简洁,更符合Elasticsearch别名的概念,因为您封装了应
有比这两种方法更好的方法吗?两种方法的性能相同,但有一点不同,第一种方法只需要发送一个请求,而第二种方法只需要发送两个请求,因此最好使用第一种方法,因为这样可以将API调用减少一半。 在我看来,第一种方法更简洁,更符合Elasticsearch别名的概念,因为您封装了应用程序中的确切索引名,因为应用程序不需要知道文档所在的确切索引名 关于在Elasticsearch中更新文档的一个重要注意事项是,Elasticsearch中的文档不会得到更新,这意味着该文档将被标记为已删除,并将创建新文档(这是由于Lucene的实施),然后在Lucene
段合并过程中,该文档将被实际删除。
你可以找到一篇关于段合并的好博客文章
POST my-alias/_update_by_query
{
"query": {
"terms": {
"_id": ["my-id-to-update"]
}
},
"script": {
"source": "ctx._source['Field'] = 'new value'"
}
}
GET my-alias/_search
{
"query": {
"terms": {
"_id": ["my-id-to-update"]
}
}
}
POST my-index-returned-from-the-get/_update/my-id-to-update
{
"doc": {
"Field": "new value"
}
}