Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将标签存储到ElasticSearch中_C#_String_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,String,elasticsearch,Nest" /> elasticsearch,nest,C#,String,elasticsearch,Nest" />

C# 将标签存储到ElasticSearch中

C# 将标签存储到ElasticSearch中,c#,string,elasticsearch,nest,C#,String,elasticsearch,Nest,我有一个ElasticSearch数据库,其中存储了简单的用户生成字符串(也称为消息)。每个字符串都可以附加多个标记。标记的总数是已知的,但可能会随着时间的推移而增加(我不想在需要创建新的消息标记时将我锁定,即我不想重新索引整个数据库以添加新标记) 现在,系统应该能够对消息执行freetext搜索(这几乎是ElasticSearch免费提供的),并搜索带有特定标记(或标记子集)的消息 定义ES文档的最佳方式是什么?目前,我最关心的是实现嵌套查询的最简单方法 请注意,搜索应在ES级别执行,而不是在

我有一个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随后将更新文档并重新编制文档索引(而不是整个索引)。

如果回答“正确”,请注意,最有可能的标记应该是
未分析的
。除非您希望在搜索标记结构时支持自动完成或模糊性,在这种情况下,您可以为标签的已分析和未分析版本编制索引。“未分析”至少对于术语聚合来说是方便的。“正确”的答案是,最有可能的标记应该是
未分析的
。除非您希望在搜索标记序列时支持自动完成或模糊性,否则您可以为已分析和未分析的标记版本编制索引。至少对于术语聚合而言,未分析是方便的。