我对Elasticsearch和它的所有概念都很陌生。我想了解如何在Elasticsearch体系结构中实现关系数据库中的功能。
方案如下:
我有一个索引“数据”:
{
"id": "00001",
"content" : "some text here ..",
"type": "T1",
"categories: ["A", "A1", "B"]
}该要求规定,可以通过以下方式查询数据:
的上下文字段
到目前为止,很简单,很好。
此数据将不会从创建时完成。以后可能会向数据中添加/删除新的类别。因此,许多数据上传/重新索引可能会在此过程中发生。
例如:
创建数据
{
"id": "00001",
"content" : "some text here ..",
"type": "T1",
"categories: ["A"]
}然后,决定了type=T1的所有数据必须同时属于A&B两类。
{
"id": "00001",
"content" : "some text here ..",
"type": "T1",
"categories: ["A", "B"]
}如果我对type=T1有10亿次点击,我将不得不更新/重新索引10亿个条目。也许这就是事情应该如何运作,而这正是我的问题所在。
是否可以仅仅为了添加/删除一个新的类别而重新索引所有数据,或者是否可以有第二个小得多的索引来完成这个关联,并以某种方式将两个索引连接起来进行查询?
就像这样:
数据:
{
"id": "00001",
"content" : "some text here ..",
"type": "T1"
}DataCategories:
{
"type": "T1"
"categories" : ["A", "B"]
}这可以接受/可能吗?
发布于 2022-05-01 15:44:14
这是一个常见的场景--但不幸的是,在Lucene/elasticsearch这样的文本搜索引擎中,RDBMS功能没有1:1的映射。
可能的备选方案:
为了获得最好的表现,重新编制索引。这可能是不切实际的,取决于你的变化速度。
2-考虑父母-孩子;虽然这是一个较慢的选择-通常会满足性能要求。这个类别可以是一个父文档,每个文档都有数千个子文档。
3-如果其类别重命名--考虑对类别使用in并将其翻译为应用程序中的文本。
更新文档取决于要更新的文档的数量;如果更多地重新索引,则可能对几千个更新查询运行更新查询。
建议阅读- https://www.elastic.co/blog/managing-relations-inside-elasticsearch
https://stackoverflow.com/questions/72077546
复制相似问题