我对ElasticSearch中的字段属性感到有点挣扎,特别是因为5.x(我将代码移植到我的代码中)的情况有所改变。
一个例子是:
[Text(Index = false)]
public string Id { get; set; }
[Keyword]
public string Tags { get; set; }
[Text]
public string Title { get; set; }
我有很多像这样的字段,但是我试图弄清楚这个字段的最佳属性:
很多帖子都提到ES'文档,但我真的没有看到属性文档中的任何清晰度;它似乎是与那些已经理解了系统的人一起写的。如果有人有像属性及其影响(存储,搜索,分析等)细分的excelsheet那将是非常棒的
答案 0 :(得分:10)
文档只会随着时间的推移而变得更好; contributions are most appreciated:)
回答你的问题:
- 可以按原样搜索的文本字段,不进行解释(例如字符串ID)。我希望能够搜索确切的字符串,没有别的
使用KeywordAttribute
,这会创建一个Keyword
data type的字段。
- 我希望能够完整搜索单词和邻近度的英文文本。
使用TextAttribute
,这会创建一个Text
data type的字段。默认情况下,使用的分析器将是Standard Analyzer
。根据您的域和搜索条件,您可以使用其他分析器,可以是预配置的,也可以是自定义的。
- 一个枚举,其中值可以存储为有限的字符串列表,我需要将其用作搜索条件
如果您想要完全匹配,可以在此使用KeywordAttribute
。您可能希望不区分大小写搜索,在这种情况下,您可以将TextAttribute
与由Keyword
tokenizer和Lowercase
token filter组成的自定义分析器一起使用。
- 标签是一个单词列表,但不构成句子;我需要能够搜索那些
如果您正在寻找非结构化搜索,请使用TextAttribute
。
- 要存储且不可搜索的数字
使用映射到numeric data types的NumberAttribute
,其中NumberType
对应于POCO的numeric
类型,例如对于Int32
(int
),请使用NumberType.Integer
。对于要存储在_source
但不能搜索的号码,请设置Index=false
,例如
[Number(NumberType.Integer, Index = false)]
public int MyNumber { get;set; }
Index
对应于数字类型的index
。
对应的- 要存储和搜索的日期
DateAttribute
- 要存储但不可搜索的日期
将DateAttribute
与Index=false
看看documentation for the mapping parameters that are available to field mappings。 Elasticsearch文档中的参数名称在NEST中以Pascal为名称公开。