Elasticsearch C# Nest [5.x] 属性

Elasticsarch C# Nest [5.x] attributes

我对 ElasticSearch 中的字段属性有点费劲,特别是因为 5.x 发生了一些变化(我正在将代码移植到其中)。

一个例子是这样的:

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

我有很多这样的字段,但我正在尝试为以下字段找出最佳属性:

很多帖子都提到了 ES 的文档,但我真的没有在属性文档中看到任何清晰的地方;它似乎是与已经了解系统的人一起编写的。如果有人有 Excel 表,比如属性及其影响(存储、可搜索、分析等)的细分,那就太棒了

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

回答您的问题:

  • A text field to be searchable AS-IS, not interpreted (a string ID for example). I want to be able to search the exact string, nothing else

使用 KeywordAttribute,它创建一个带有 Keyword data type 的字段。

  • An English text in which I want to be able to do a full search for words and proximity.

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

  • An enum where values may be stored as a finite list of strings and I need to use that as a search criteria

如果您需要完全匹配,可以在此处使用 KeywordAttribute。但是,您可能想要不区分大小写地搜索,在这种情况下,您可以将 TextAttribute 与由 Keyword tokenizer and Lowercase token filter.

组成的自定义分析器一起使用
  • Tags which are a list of words but don't form sentences; I need to be able to search through those

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

-Numbers that are to be stored and not searchable

使用映射到 numeric data typesNumberAttribute,以及对应于 POCO 的 numeric 类型的 NumberType,例如对于 Int32 (int),使用 NumberType.Integer。对于要存储在 _source 但不可搜索的号码,设置 Index=false 例如

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

Index 对应于数字类型的 index

-Dates that are to be stored and searchable

使用对应于Date data type

DateAttribute

-Dates that are to be stored but not searchable

使用 DateAttributeIndex=false

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