【问题标题】:Nested documents in ElasticSearch without mapping types没有映射类型的 ElasticSearch 中的嵌套文档
【发布时间】:2020-02-18 06:35:30
【问题描述】:

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

【问题讨论】:

  • 我认为这不会对此产生影响,我想尝试一下,因为如果您可以分享您的映射、示例文档和查询,那就太好了,顺便说一句 +1问题
  • 谢谢,@es-enthu。我添加了一个精简的示例映射和查询,希望能展示它在 ElasticSearch 6 中是如何工作的。

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


【解决方案1】:

不,删除 _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 索引示例,它在一个索引中定义了用户和推文文档类型。

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多