我刚刚开始学习Elasticsearch索引;然而,在我的日常工作中,我需要每天更新es索引。您可能假设数据每天都在变化,所以我删除我的索引名并重新创建相同的索引,并将数据插入重新创建的es-index中,但有时我们的客户端会说数据有时会消失,在重新刷新之后,它会稍后出现,因此会影响来自客户端的请求?请问这是否是更新索引的正确方法,我知道有一个叫做update by查询方法,但我只想知道这是否是更新es索引的坏方法?或者它将如何影响在网页上出现的结果,由前端开发人员调用?
基本上,我的代码如下所示:
if self.es.indices.exist(index=idx):
self.es.indices.delete(index=idx)
self.es.indices.create(index=idx, body=body)
for line in self.course_info_df.collect():
tmp = line.asDict()
output = {"x": tmp['x'],
"y": tmp['y'],
"z": tmp['z']
self.es.index(index=idx, doc_type='doc', body=output)这是一个叫做ElasticSearch的python库,每次我检查索引是否存在,如果存在,我就删除它并重新创建新的索引。
然而,我需要重新创建新索引的原因,因为我需要更新我们的再推荐服务的数据,所以我提交离线作业集群,然后将这些结果存储到es-index中,所以您可以假设我使用ES作为数据库来存储数据,因为前端开发人员将使用它将数据写入网页。
还是支持一些函数将数据作为es格式的数据上传到es索引中?
发布于 2022-05-15 14:57:42
我不明白为什么每天都对所有文档进行索引,但这可能类似于业务逻辑。不管怎么说。以下是给你的一些解决方案:
解决方案1
您可以在这些方面使用aliases。想一想,你有产品,你想要重新索引他们每天。因此,第一天,您可以创建一个索引为products-00001。可以将所有数据索引到此索引,并且可以使用以下请求创建别名为products:
POST _aliases
{
"actions": [
{
"add": {
"index": "products-00001",
"alias": "products"
}
}
]
}因此,第二天,您可以为集群创建另一个索引,作为products-00002,并首先将所有数据索引到新的索引中。然后,可以将别名切换到新索引:
POST _aliases
{
"actions": [
{
"add": {
"index": "products-00002",
"alias": "products"
}
},
{
"remove": {
"index": "products-00001",
"alias": "products"
}
}
]
}上面对于products-00002有一个add操作,对于products-00001有一个remove操作。因此,别名将从products-00001中删除并附加到products-00002中。在此操作之后,可以删除products-00001索引。第二天,您可以创建新的索引,再次解释为products-00003。诸若此类。
在前端,他们将使用products名称作为索引名.他们不会改变他们这边的任何东西。
有关更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/aliases.html#aliases
解决方案2
我认为循环所有文档可以重新索引它们可能是错误的。在我看来,这是错误的。但是,根据一些业务逻辑,这可能是正确的。不管怎么说。您可以使用更新操作。在这种情况下,您不需要使用别名或其他东西。只是,1次您需要索引所有文档,然后对每次文档更新,您需要更新文档1乘1或批量方式。您甚至可以使用部分更新。据我所知,您甚至已经了解_update_by_query了。您只需要知道,这些更新将增加索引的已删除文档数量:
GET _cat/indices?v&s=index&h=index,docs.count,docs.deleted
index docs.count docs.deleted
some-index.analytics.2022.05 1 0
some-index.other.2022.05 3058 250如上面所示,您可以看到带有_cat/indices请求的已删除文档的数量。这些已删除的文档可能会影响搜索性能。由于这个原因,您需要一次一次地合并操作,或者需要在索引上配置正确的频率,但是在执行任何操作之前,请阅读以下页面:
https://stackoverflow.com/questions/72246266
复制相似问题