【发布时间】:2019-09-27 15:24:01
【问题描述】:
我已经解决了很多这个问题我现在想知道问题是什么以及我可能做错了什么。
我打算使用 NEST 重新创建的控制台查询是:
{
"tdindex" : {
"mappings" : {
"documentModel" : {
"properties" : {
"accessControl" : {
"type" : "boolean",
"copy_to" : [
"copyTo"
]
},
"comments" : {
"properties" : {
"comment" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]},
"createDate" : {
"type" : "date",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]},
"user" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
}
}
},
"copyTo" : {
"type" : "text"
},
"documentType" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
},
"filename" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
},
"folderID" : {
"type" : "long",
"copy_to" : [
"copyTo"
]
},
"metadata" : {
"properties" : {
"key" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
},
"value" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
}
}
},
"uploadDate" : {
"type" : "date",
"copy_to" : [
"copyTo"
]
},
"uploadUser" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"copyTo"
]
}
}
}
}
}
}
我的巢目前正在创建以下控制台查询:
{
"mappings": {
"properties": {
"folderid": {
"copy_to": [
"CopyTo"
],
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"filename": {
"copy_to": [
"CopyTo"
],
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"documenttype": {
"copy_to": [
"CopyTo"
],
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"uploaddate": {
"copy_to": [
"CopyTo"
],
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"uploaduser": {
"copy_to": [
"CopyTo"
],
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"comments": {
"properties": {
"createdate": {
"type": "date"
},
"comment": {
"type": "text"
},
"user": {
"type": "text"
}
},
"copy_to": [
"CopyTo"
],
"type": "nested"
},
"metadata": {
"properties": {
"key": {
"type": "text"
},
"value": {
"type": "text"
}
},
"copy_to": [
"CopyTo"
],
"type": "nested"
},
"CopyTo": {
"type": "text"
}
}
}
}
如您所见,它忽略了 DocumentModel……
我使用的 NEST 代码是:
_elasticClient.CreateIndex(indexParameters.IndexName, c =>
{
c.Map<DocumentModel>(m => m
.Properties(ps => ps
.Text(t => t.Name(n => n.FolderID).CopyTo(n => n.Field(f => f.CopyTo)).Fields(fd => fd.Keyword(k => k.Name("keyword").IgnoreAbove(256))))
.Text(t => t.Name(n => n.Filename).CopyTo(n => n.Field(f => f.CopyTo)).Fields(fd => fd.Keyword(k => k.Name("keyword").IgnoreAbove(256))))
.Text(t => t.Name(n => n.DocumentType).CopyTo(n => n.Field(f => f.CopyTo)).Fields(fd => fd.Keyword(k => k.Name("keyword").IgnoreAbove(256))))
.Text(t => t.Name(n => n.UploadDate).CopyTo(n => n.Field(f => f.CopyTo)).Fields(fd => fd.Keyword(k => k.Name("keyword").IgnoreAbove(256))))
.Text(t => t.Name(n => n.uploadUser).CopyTo(n => n.Field(f => f.CopyTo)).Fields(fd => fd.Keyword(k => k.Name("keyword").IgnoreAbove(256))))
.Nested<Comments>(cm => cm.Name(n => n.Comments).AutoMap().CopyTo(n => n.Field(f => f.CopyTo)))
.Nested<Metadata>(md => md.Name(n => n.Metadata).AutoMap().CopyTo(n => n.Field(f => f.CopyTo)))
.Text(t => t.Name(n => n.CopyTo)))
我的 DocumentModel 看起来像这样(我不能在模型中使用 [ElasticsearchType(Name = "documentModel")] 不确定这是否是问题的一部分?):
public class DocumentModel
{
[Text(Name = "filename")]
public string Filename { get; set; }
[Text(Name = "folderid")]
public int FolderID { get; set; }
[Text(Name = "uploaduser")]
public string uploadUser { get; set; }
[Date(Format = "MMddyyyy")]
public DateTime UploadDate { get; set; }
[Text(Name = "documenttype")]
public string DocumentType { get; set; }
[Boolean(NullValue = false)]
public bool AccessControl { get; set; }
[Nested]
public List<Comments> Comments { get; set; }
[Nested]
public List<Metadata> Metadata { get; set; }
[Text(Name = "CopyTo")]
public string CopyTo { get; set; }
}
public class Comments
{
[Date(Format = "MMddyyyy")]
public DateTime CreateDate { get; set; }
[Text(Name = "comment")]
public string Comment { get; set; }
[Text(Name = "user")]
public string User { get; set; }
}
public class Metadata
{
[Text(Name = "key")]
public string Key { get; set; }
[Text(Name = "value")]
public string Value { get; set; }
}
我在运行查询时从控制台得到的错误是:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [metadata : {copy_to=[CopyTo], type=nested, properties={value={type=text}, key={type=text}}}] [filename : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [comments : {copy_to=[CopyTo], type=nested, properties={createdate={type=date}, comment={type=text}, user={type=text}}}] [uploaddate : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [CopyTo : {type=text}] [documenttype : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [folderid : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [uploaduser : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}]"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [properties]: Root mapping definition has unsupported parameters: [metadata : {copy_to=[CopyTo], type=nested, properties={value={type=text}, key={type=text}}}] [filename : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [comments : {copy_to=[CopyTo], type=nested, properties={createdate={type=date}, comment={type=text}, user={type=text}}}] [uploaddate : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [CopyTo : {type=text}] [documenttype : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [folderid : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [uploaduser : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}]",
"caused_by": {
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [metadata : {copy_to=[CopyTo], type=nested, properties={value={type=text}, key={type=text}}}] [filename : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [comments : {copy_to=[CopyTo], type=nested, properties={createdate={type=date}, comment={type=text}, user={type=text}}}] [uploaddate : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [CopyTo : {type=text}] [documenttype : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [folderid : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}] [uploaduser : {copy_to=[CopyTo], fields={keyword={ignore_above=256, type=keyword}}, type=text}]"
}
},
"status": 400
有什么想法吗?
我认为问题是由于地图引起的?
附:我在 localhost 上运行 Kibana 6.7.1 和 Elastic 6.7.1。我正在运行查询(来自使用 NEST 的请求创建的 JSON 对象)
【问题讨论】:
-
您使用的是哪个版本的 Nest?当前版本尚不支持 Elastic 7,但如果您在 Nuget 中启用预发布版本,则可以使用 alpha。您可以在此处查看支持的版本:github.com/elastic/elasticsearch-net
-
原来我正在使用 NEST 7.0.0-aplha...我已经设法让控制台查询看起来更接近我想要的但仍然没有乐趣...我一定会如果我取得任何进展,请更新这篇文章......干杯
-
至于缺少的“documentModel”键:默认情况下,ES 7.0 不允许通过默认
include_type_name查询参数为 false 来指定文档类型。见elastic.co/guide/en/elasticsearch/reference/master/…。您的实际问题可能与您如何将映射传递给 Elasticsearch 有关。您需要更准确地理解“运行查询时我从控制台得到的错误”的意思——什么控制台?什么端点?你是如何运行查询的? -
我刚刚在我的集群上试过了;嵌套为您生成的映射实际上是正确的,并按预期创建了一个索引。查看elastic.co/guide/en/elasticsearch/reference/current/… 和elastic.co/guide/en/elasticsearch/reference/current/… 的示例,了解您应该如何向 ES 提出请求。这是一个巢虫的可能性很小。回复:“除非你能帮助解决问题,否则不要发帖”:作为对等,除非你准备好为网站做出贡献,否则不要在 StackOverflow 上提问。
-
@Backgammon 我认为它在 NEST 7.x(弹性)中贬值了,Nest 现在声明“CreateIndexDescriptor.Mapings(Func
)' 已过时:'映射不再是字典在 7.x 中,请使用简化的 Map()..." 找到新语法很痛苦
标签: .net elasticsearch mapping nest