没有映射类型的ElasticSearch中的嵌套文档

时间:2020-02-18 06:35:30

标签: elasticsearch nested nest elasticsearch-mapping elasticsearch-7

随着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
}

2 个答案:

答案 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的澄清。

相关问题