Elasticsarch C#Nest [5.x]属性

时间:2017-01-16 16:23:15

标签: c# elasticsearch nest

我对ElasticSearch中的字段属性感到有点挣扎,特别是因为5.x(我将代码移植到我的代码中)的情况有所改变。

一个例子是:

    [Text(Index = false)]
    public string Id                        { get; set; }
    [Keyword]
    public string Tags                      { get; set; }
    [Text]
    public string Title                     { get; set; }

我有很多像这样的字段,但是我试图弄清楚这个字段的最佳属性:

  • 可以按原样搜索的文本字段,不进行解释(例如字符串ID)。我希望能够搜索确切的字符串,没有别的
  • 我希望能够完整搜索单词和邻近度的英文文本。
  • 一个枚举,其中值可以存储为有限的字符串列表,我需要将其用作搜索条件
  • 标签是一个单词列表,但不构成句子;我需要能够搜索那些
  • 要存储且无法搜索的数字
  • 要存储和搜索的日期
  • 要存储但不可搜索的日期

很多帖子都提到ES'文档,但我真的没有看到属性文档中的任何清晰度;它似乎是与那些已经理解了系统的人一起写的。如果有人有像属性及其影响(存储,搜索,分析等)细分的excelsheet那将是非常棒的

1 个答案:

答案 0 :(得分:10)

文档只会随着时间的推移而变得更好; contributions are most appreciated:)

回答你的问题:

  
      
  • 可以按原样搜索的文本字段,不进行解释(例如字符串ID)。我希望能够搜索确切的字符串,没有别的
  •   

使用KeywordAttribute,这会创建一个Keyword data type的字段。

  
      
  • 我希望能够完整搜索单词和邻近度的英文文本。
  •   

使用TextAttribute,这会创建一个Text data type的字段。默认情况下,使用的分析器将是Standard Analyzer。根据您的域和搜索条件,您可以使用其他分析器,可以是预配置的,也可以是自定义的。

  
      
  • 一个枚举,其中值可以存储为有限的字符串列表,我需要将其用作搜索条件
  •   

如果您想要完全匹配,可以在此使用KeywordAttribute。您可能希望不区分大小写搜索,在这种情况下,您可以将TextAttribute与由Keyword tokenizerLowercase token filter组成的自定义分析器一起使用。

  
      
  • 标签是一个单词列表,但不构成句子;我需要能够搜索那些
  •   

如果您正在寻找非结构化搜索,请使用TextAttribute

  

- 要存储且不可搜索的数字

使用映射到numeric data typesNumberAttribute,其中NumberType对应于POCO的numeric类型,例如对于Int32int),请使用NumberType.Integer。对于要存储在_source但不能搜索的号码,请设置Index=false,例如

[Number(NumberType.Integer, Index = false)]
public int MyNumber { get;set; }

Index对应于数字类型的index

  

- 要存储和搜索的日期

使用与Date data type

对应的DateAttribute
  

- 要存储但不可搜索的日期

DateAttributeIndex=false

一起使用

看看documentation for the mapping parameters that are available to field mappings。 Elasticsearch文档中的参数名称在NEST中以Pascal为名称公开。