Elasticsearch 映射 - 嵌套对象上的多字段 属性
Elasticsearch Mapping - Multi field on nested object property
我有以下属性
[Nested]
public List<TagModel> Tags { get; set; }
而在TagModel
中有一个属性如下
[String]
public string Tag { get; set; }
我想使用 Nest 将 Tag
属性 映射为多字段 属性。
我认为这行得通,
.String
(s => s.Name
(n => n.Tags.First()
.Tag)
.Fields
(fi => fi.String
(sub => sub.Name("partial")
.Analyzer("test"))
.String
(sub => sub.Name("middle")
.Analyzer("test2"))));
但是在它输出的映射中,Tags
仍然是:
"tags": {
"type": "nested",
"properties": {
"tag": {
"type": "string"
},
然后在映射结束时:
"tags.tag": {
"type": "string",
"fields": {
"partial": {
"type": "string",
"analyzer": "test",
},
"middle": {
"type": "string",
"analyzer": "test2",
},
并抛出异常 400
说 reason": "Field name [tags.tag] cannot contain '.'"
我猜它不喜欢名称中的 linq First()
调用(这很奇怪,因为嵌套项中的搜索确实接受这个....)
那么我怎样才能将 属性 映射到 class 中,而 属性 中使用的 属性 本身就是 nested
项....
目前正在使用 Nest 2.0.0 alpha-2
好的,在(大量)猜测和检查之后,可以按如下方式完成:
x.Nested<TagModel>
(ne => ne.Name(n => n.Tags)
.AutoMap()
.Properties
(p => p.String
(s => s.Name(n => n.Tag)
.Fields
(fi => fi.String
(sub => sub.Name("partial")
.Analyzer("test"))
.String
(sub => sub.Name("middle")
.Analyzer("test2"))))));
当你在模型中有额外的属性时,AutoMap
似乎是必需的,即如果我在 TagModel
中喜欢 TagID
然后没有 AutoMap
此处未特别提及的任何其他属性都不会被映射(即使它们具有属性等设置)。
我有以下属性
[Nested]
public List<TagModel> Tags { get; set; }
而在TagModel
中有一个属性如下
[String]
public string Tag { get; set; }
我想使用 Nest 将 Tag
属性 映射为多字段 属性。
我认为这行得通,
.String
(s => s.Name
(n => n.Tags.First()
.Tag)
.Fields
(fi => fi.String
(sub => sub.Name("partial")
.Analyzer("test"))
.String
(sub => sub.Name("middle")
.Analyzer("test2"))));
但是在它输出的映射中,Tags
仍然是:
"tags": {
"type": "nested",
"properties": {
"tag": {
"type": "string"
},
然后在映射结束时:
"tags.tag": {
"type": "string",
"fields": {
"partial": {
"type": "string",
"analyzer": "test",
},
"middle": {
"type": "string",
"analyzer": "test2",
},
并抛出异常 400
说 reason": "Field name [tags.tag] cannot contain '.'"
我猜它不喜欢名称中的 linq First()
调用(这很奇怪,因为嵌套项中的搜索确实接受这个....)
那么我怎样才能将 属性 映射到 class 中,而 属性 中使用的 属性 本身就是 nested
项....
目前正在使用 Nest 2.0.0 alpha-2
好的,在(大量)猜测和检查之后,可以按如下方式完成:
x.Nested<TagModel>
(ne => ne.Name(n => n.Tags)
.AutoMap()
.Properties
(p => p.String
(s => s.Name(n => n.Tag)
.Fields
(fi => fi.String
(sub => sub.Name("partial")
.Analyzer("test"))
.String
(sub => sub.Name("middle")
.Analyzer("test2"))))));
当你在模型中有额外的属性时,AutoMap
似乎是必需的,即如果我在 TagModel
中喜欢 TagID
然后没有 AutoMap
此处未特别提及的任何其他属性都不会被映射(即使它们具有属性等设置)。