0

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

2 回答 2

2

不,删除 _type 对嵌套文档和查询没有影响。

过去,人们在一个索引中使用不同类型来对多个实体进行建模。问题是,一些实体具有相同的字段但字段类型不同。例如“版本”,在一个实体中是字符串,而在另一个实体中是整数。这导致了一个问题,因为没有针对这种情况的解决方案。

编辑: 嵌套对象是一种映射数据类型,用于对文档中的复杂属性进行建模,如下所示:

{
  "_id" : "12345",
  "user" : { "login":"foo", "email":"foo@example.com"}
}

请注意文档本身中的用户对象或上面映射中的“详细信息”属性。此处提供更多示例:https ://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

文档文档类型是一组通过其映射定义文档结构的属性。

过去,有可能使用两种 doctype 在一个索引中对“汽车”和“飞机”进行建模。在当前版本中,只有一种 doctype,主要命名为 _doc,在以后的版本中将被完全删除。

在您链接的文档中(删除类型),有一个很好的多文档类型 twitter 索引示例,它在一个索引中定义了用户和推文文档类型。

于 2020-02-18T07:08:12.187 回答
0

看起来GetMapping7+ 版本中 NEST 客户端上的方法已移至IElasticSearchClient.Indicies.GetFieldMapping. 我的误解是所有类型都被删除了。实际上,似乎计划是每个索引只有一种类型。感谢@ibexit 的澄清。

于 2020-02-19T03:16:41.837 回答