我有一个ElasticSearch数据库,其中存储了简单的用户生成的字符串(也就是消息)。每个字符串都可以附加许多标记。总数没有。标签是先验已知但可能随着时间的推移而增加(我不想锁定我,以防我觉得需要创建一个新的消息标签,即我不想重新索引我的整个数据库以添加新标签。)
现在,系统应该能够对消息执行自由文本搜索(这几乎是免费使用ElasticSearch),并搜索具有特定标记(或标记子集)的消息。
定义ES文档的最佳方法是什么?目前我主要关心的是为它实现NEST查询的最简单方法。
请注意,搜索应该在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; }
}
答案 0 :(得分:3)
Elasticsearch也可以索引数组。所以如果你有一个如下文件:
{
stringContent: "Some string content",
tags: ["important", "revisit", "elasticsearch"]
}
您可以使用标签搜索此内容。 Elasticsearch将使用文档映射数组的每个元素。
说到更新,请注意Elasticsearch是NRT(近乎实时)。您可以更新文档,elasticsearch将随后更新文档并重新索引文档(不是整个索引)。