将标签存储到ElasticSearch中
本文关键字:ElasticSearch 存储 标签 | 更新日期: 2023-09-27 18:30:01
我有一个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(近实时)。您可以更新文档,弹性搜索随后会更新文档并重新索引文档(不是整个索引)。