将标签存储到 ElasticSearch 中
Storing tags into ElasticSearch
我有一个 ElasticSearch 数据库,我在其中存储简单的用户生成的字符串(又名消息)。每个字符串都可以附加许多标签。总号标签的数量是先验的,但 可能 随着时间的推移而增加(我不想把我锁在外面,以防我觉得需要创建一个新的消息标签,即我不想重新索引我的整个数据库以添加新标签)。
现在,系统应该能够对消息执行自由文本搜索(ElasticSearch 几乎免费提供)并搜索带有特定标签(或标签子集)的消息。
定义ES文档的最佳方式是什么?目前我主要关心为其实现 NEST 查询的最简单方法。
请注意,搜索应该在ES级别进行,而不是应用程序级别!我不想检索所有消息,然后根据我的业务逻辑手动过滤掉它们。
我能想到的可能方案:
- 标签 ID 列表
- 标签名称列表(实际标签名称)
- 位域(第 i 个标签存在 = 第 i 个位设置,第 i 个标签不存在 = 第 i 个位清除)(ES 本身是否支持按位运算?)
我当前的文档:
[ElasticType(Name = "Message")]
public class MessageRecord
{
[ElasticProperty(Store = false, Index = FieldIndexOption.Analyzed)]
public string Message { get; set; }
[ElasticProperty(Store = false, Index = FieldIndexOption.No)]
public List<int> CatList { get; set; }
}
Elasticsearch 也可以索引数组。因此,如果您有如下文档:
{
stringContent: "Some string content",
tags: ["important", "revisit", "elasticsearch"]
}
您将能够使用标签对此进行搜索。 Elasticsearch 会将数组的每个元素映射到文档。
关于更新,请注意 Elasticsearch 是 NRT(近实时)。您可以更新文档,elasticsearch 将随后更新文档并重新索引文档(不是整个索引)。
我有一个 ElasticSearch 数据库,我在其中存储简单的用户生成的字符串(又名消息)。每个字符串都可以附加许多标签。总号标签的数量是先验的,但 可能 随着时间的推移而增加(我不想把我锁在外面,以防我觉得需要创建一个新的消息标签,即我不想重新索引我的整个数据库以添加新标签)。
现在,系统应该能够对消息执行自由文本搜索(ElasticSearch 几乎免费提供)并搜索带有特定标签(或标签子集)的消息。
定义ES文档的最佳方式是什么?目前我主要关心为其实现 NEST 查询的最简单方法。
请注意,搜索应该在ES级别进行,而不是应用程序级别!我不想检索所有消息,然后根据我的业务逻辑手动过滤掉它们。
我能想到的可能方案:
- 标签 ID 列表
- 标签名称列表(实际标签名称)
- 位域(第 i 个标签存在 = 第 i 个位设置,第 i 个标签不存在 = 第 i 个位清除)(ES 本身是否支持按位运算?)
我当前的文档:
[ElasticType(Name = "Message")]
public class MessageRecord
{
[ElasticProperty(Store = false, Index = FieldIndexOption.Analyzed)]
public string Message { get; set; }
[ElasticProperty(Store = false, Index = FieldIndexOption.No)]
public List<int> CatList { get; set; }
}
Elasticsearch 也可以索引数组。因此,如果您有如下文档:
{
stringContent: "Some string content",
tags: ["important", "revisit", "elasticsearch"]
}
您将能够使用标签对此进行搜索。 Elasticsearch 会将数组的每个元素映射到文档。
关于更新,请注意 Elasticsearch 是 NRT(近实时)。您可以更新文档,elasticsearch 将随后更新文档并重新索引文档(不是整个索引)。