我对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那将是太棒了
文档只会随着时间的推移而变得更好; 贡献最受赞赏 :)
回答你的问题:
要搜索的文本字段,不进行解释(例如字符串ID).我希望能够搜索确切的字符串,没有别的
使用KeywordAttribute
,创建一个具有Keyword
数据类型的字段.
一个英文文本,我希望能够对单词和邻近区域进行全面搜索.
使用TextAttribute
,创建一个具有Text
数据类型的字段.默认情况下,使用的分析仪将是Standard Analyzer
.根据您的域和搜索条件,您可以使用其他分析器,可以是预配置的,也可以是自定义的.
一个枚举,其中值可以存储为有限的字符串列表,我需要将其用作搜索条件
KeywordAttribute
如果您想要完全匹配,可以在这里使用.您可能希望不区分大小写地搜索,在这种情况下,您可以使用TextAttribute
由Keyword
标记化器和Lowercase
标记过滤器组成的自定义分析器.
标签是一个单词列表但不形成句子; 我需要能够搜索这些内容
如果您正在寻找非结构化搜索,那么请使用TextAttribute
.
- 要存储且不可搜索的数字
使用NumberAttribute
映射到数字数据类型,使用与POCO类型NumberType
相对应的数据,numeric
例如for Int32
(int
),use NumberType.Integer
.对于要存储_source
但不可搜索的数字,请设置Index=false
例如
[Number(NumberType.Integer, Index = false)] public int MyNumber { get;set; }
Index
对应index
于数字类型.
- 要存储和搜索的日期
使用DateAttribute
与数据类型对应的Date
- 要存储但不可搜索的日期
使用DateAttribute
withIndex=false
请查看字段映射可用的映射参数的文档.Elasticsearch文档中的参数名称在NEST中以Pascal为基础的名称公开.