将标签存储到ElasticSearch中

时间:2016-01-12 10:56:56

标签: c# string elasticsearch nest

我有一个ElasticSearch数据库,其中存储了简单的用户生成的字符串(也就是消息)。每个字符串都可以附加许多标记。总数没有。标签是先验已知但可能随着时间的推移而增加(我不想锁定我,以防我觉得需要创建一个新的消息标签,即我不想重新索引我的整个数据库以添加新标签。)

现在,系统应该能够对消息执行自由文本搜索(这几乎是免费使用ElasticSearch),并搜索具有特定标记(或标记子集)的消息。

定义ES文档的最佳方法是什么?目前我主要关心的是为它实现NEST查询的最简单方法。

请注意,搜索应该在ES级别执行,而不是在应用程序级别执行!我不想检索所有消息,然后在我的业务逻辑上手动过滤它们。

我能想到的可能选择:

  • 标签ID列表
  • 标签名称列表(实际标签名称)
  • Bitfield(第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; }
}

1 个答案:

答案 0 :(得分:3)

Elasticsearch也可以索引数组。所以如果你有一个如下文件:

{ 
  stringContent: "Some string content",
  tags: ["important", "revisit", "elasticsearch"]
}

您可以使用标签搜索此内容。 Elasticsearch将使用文档映射数组的每个元素。

说到更新,请注意Elasticsearch是NRT(近乎实时)。您可以更新文档,elasticsearch将随后更新文档并重新索引文档(不是整个索引)。