C# 将标签存储到ElasticSearch中
我有一个ElasticSearch数据库,其中存储了简单的用户生成字符串(也称为消息)。每个字符串都可以附加多个标记。标记的总数是已知的,但可能会随着时间的推移而增加(我不想在需要创建新的消息标记时将我锁定,即我不想重新索引整个数据库以添加新标记) 现在,系统应该能够对消息执行freetext搜索(这几乎是ElasticSearch免费提供的),并搜索带有特定标记(或标记子集)的消息 定义ES文档的最佳方式是什么?目前,我最关心的是实现嵌套查询的最简单方法 请注意,搜索应在ES级别执行,而不是在应用程序级别执行!我不想检索所有消息,然后在我的业务逻辑上手动筛选它们 我能想到的可能选择:C# 将标签存储到ElasticSearch中,c#,string,
elasticsearch,nest,C#,String,
elasticsearch,Nest,我有一个ElasticSearch数据库,其中存储了简单的用户生成字符串(也称为消息)。每个字符串都可以附加多个标记。标记的总数是已知的,但可能会随着时间的推移而增加(我不想在需要创建新的消息标记时将我锁定,即我不想重新索引整个数据库以添加新标记) 现在,系统应该能够对消息执行freetext搜索(这几乎是ElasticSearch免费提供的),并搜索带有特定标记(或标记子集)的消息 定义ES文档的最佳方式是什么?目前,我最关心的是实现嵌套查询的最简单方法 请注意,搜索应在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; }
}
[ElasticType(Name=“Message”)]
公共类消息记录
{
[ElasticProperty(Store=false,Index=FieldIndexOption.analysis)]
公共字符串消息{get;set;}
[ElasticProperty(Store=false,Index=FieldIndexOption.No)]
公共列表CatList{get;set;}
}
Elasticsearch也可以索引数组。因此,如果您有如下文档:
{
stringContent: "Some string content",
tags: ["important", "revisit", "elasticsearch"]
}
您将能够使用标签在此搜索。Elasticsearch将用文档映射数组的每个元素
说到更新,请注意Elasticsearch是NRT(近实时)。您可以更新文档,elasticsearch随后将更新文档并重新索引文档(而不是整个索引)。elasticsearch也可以索引数组。因此,如果您有如下文档:
{
stringContent: "Some string content",
tags: ["important", "revisit", "elasticsearch"]
}
您将能够使用标签在此搜索。Elasticsearch将用文档映射数组的每个元素
说到更新,请注意Elasticsearch是NRT(近实时)。您可以更新文档,elasticsearch随后将更新文档并重新编制文档索引(而不是整个索引)。如果回答“正确”,请注意,最有可能的标记应该是
未分析的
。除非您希望在搜索标记结构时支持自动完成或模糊性,在这种情况下,您可以为标签的已分析和未分析版本编制索引。“未分析”至少对于术语聚合来说是方便的。“正确”的答案是,最有可能的标记应该是未分析的
。除非您希望在搜索标记序列时支持自动完成或模糊性,否则您可以为已分析和未分析的标记版本编制索引。至少对于术语聚合而言,未分析是方便的。