随着planned removal of mapping types进入ElasticSearch,这是否也意味着对嵌套文档和嵌套查询的弃用? ElasticSearch如何/将在无类型上下文中支持嵌套对象的查询?
我正在考虑的功能是只能返回与搜索条件匹配的嵌套数组中的匹配。
编辑1 :ElasticSearch版本6中的示例映射+查询
ElasticSearch 6映射
{
"rec": {
"mappings": {
"history": {
"properties": {
"dateCompleted": {
"type": "keyword"
},
"dateCreated": {
"type": "keyword"
},
"dateOrdered": {
"type": "keyword"
},
"dateToArrive": {
"type": "keyword"
},
"details": {
"type": "nested",
"properties": {
"clientId": {
"type": "keyword"
},
"company": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"orderNumber": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
ElasticSearch 6查询
{
"from": 0,
"query": {
"nested": {
"inner_hits": {},
"path": "details",
"query": {
"bool": {
"must": [
{
"match_phrase": {
"details.company.keyword": {
"query": "ABCD"
}
}
}
]
}
}
}
},
"size": 10,
"sort": [],
"_source": false
}
答案 0 :(得分:2)
否,删除_type对嵌套文档和查询没有影响。
过去,人们在一个索引中使用不同的类型来建模服务器实体。问题是,某些实体具有相同的字段,但字段类型不同。例如“版本”,在一个实体中为字符串,而在另一个实体中为整数。这引起了一个问题,因为这种情况没有解决方案。
编辑: 嵌套对象是一种映射数据类型,用于为文档中的复杂属性建模,如下所示:
{
"_id" : "12345",
"user" : { "login":"foo", "email":"foo@example.com"}
}
请注意文档本身内的用户对象或上面映射中的“详细信息”属性。此处提供更多示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
文档doctype是一组属性,它们通过映射来定义文档结构。
过去,有可能使用两种文档类型在一个索引中对“汽车”和“飞机”进行建模。在当前版本中,只有一种文档类型,主要命名为_doc,它将在以后的版本中完全删除。
在您链接的文档(类型的删除)中,有一个很好的示例,它定义了多文档类型Twitter索引,并在一个索引中定义了用户和Tweet文档类型。
答案 1 :(得分:0)
在7+版本的NEST客户端上的GetMapping
方法似乎已移至IElasticSearchClient.Indicies.GetFieldMapping
。我的误解是所有类型都被删除了。实际上,似乎计划是每个索引仅具有一种类型。感谢@ibexit的澄清。