c# - elasticsearch中数据继承的最佳方法是什么?
问题描述
我有一个父类和两个像这样的孩子:
public class Parent {
public Guid Id { get; set; }
public string Name { get; set; }
}
public class FirstChild {
public string IdentityCode { get; set; }
}
public class OtherChild {
public string RegistrationCode { get; set; }
}
有一个问题:将这两个继承的类存储在ElasticSearch内部的同一个Index中是否是一种好方法?我看到有一个_type属性在我的文档存储在数据库中后被添加到其中,但它始终具有“doc”值。我测试了这段代码来填充它,但它似乎不是这样工作的。
await ElasticClient.IndexAsync<FirstChild>(child, m => m.Index(IndexName));
而且,我在 SO 上发现了这个问题,用于从数据库中检索我的条目,但它已经过时并且 API 已更改并且不再可访问。
我想知道将兄弟数据存储在同一个索引中是否是一种好方法,我该如何正确地做到这一点。
解决方案
从 ES 6.0 开始,不能再在同一个索引中存储多种类型_type
,即您所指的字段将始终是doc
or _doc
。在 ES 8.0 中,该_type
字段将被完全删除。
但是,如果它对您的用例有意义,您仍然可以决定使用文档中存在的自定义type
字段将多个类型存储在单个索引中。
您应该努力仅将共享相同(或非常相似)映射的相同索引数据存储在相同的索引中,这似乎不是 , 和 的情况Parent
,FirstChild
但是SecondChild
如果您public string type
向类添加属性,您仍然可以这样做。
推荐阅读
- python - 创建正则表达式 for 循环,根据文档搜索列表中的每个字符串
- python - 用于反复试验的 Python 多重 for 循环
- kentico - 由于 Kentico 9 中的许可证限制,无法将自定义表添加到所选站点
- node.js - Postgresql-Nodejs 连接错误(ECONNREFUSED)Windows 10
- javascript - JavaScript中有用户输入吗?
- python - 多处理功能后python代码变慢
- javascript - Laravel 视图计数器 (PUT 405 (Method Not Allowed) ) 问题
- javascript - 为什么 document.getElementById 不起作用?
- php - 从发布的变量 php 创建一个数组
- java - 无法使用刷新的令牌改造请求