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; }
我有很多这样的字段,但我正在尝试为以下字段找出最佳属性:
- 按原样搜索的文本字段,不解释(例如字符串 ID)。我希望能够搜索到准确的字符串,仅此而已
- 一份英文文本,我希望能够在其中对单词和邻近度进行完整搜索。
- 一个枚举,其中的值可以存储为有限的字符串列表,我需要将其用作搜索条件
- 是单词列表但不构成句子的标签;我需要能够搜索那些
- 要存储且不可搜索的号码
- 要存储和搜索的日期
- 要存储但不可搜索的日期
很多帖子都提到了 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 types 的 NumberAttribute
,以及对应于 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
使用 DateAttribute
和 Index=false
看看documentation for the mapping parameters that are available to field mappings。 Elasticsearch 文档中的参数名称在 NEST 中公开为 Pascal-cased 个名称。
我对 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 的文档,但我真的没有在属性文档中看到任何清晰的地方;它似乎是与已经了解系统的人一起编写的。如果有人有 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 types 的 NumberAttribute
,以及对应于 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
使用 DateAttribute
和 Index=false
看看documentation for the mapping parameters that are available to field mappings。 Elasticsearch 文档中的参数名称在 NEST 中公开为 Pascal-cased 个名称。