elasticsearch Elasticsearch关系映射(一对一和一对多),elasticsearch,mapping,relationship,elastica,elasticsearch,Mapping,Relationship,Elastica" /> elasticsearch Elasticsearch关系映射(一对一和一对多),elasticsearch,mapping,relationship,elastica,elasticsearch,Mapping,Relationship,Elastica" />

elasticsearch Elasticsearch关系映射(一对一和一对多)

elasticsearch Elasticsearch关系映射(一对一和一对多),elasticsearch,mapping,relationship,elastica,elasticsearch,Mapping,Relationship,Elastica,在我的弹性搜索服务器中,我有一个索引http://localhost:9200/blog (博客)索引包含多种类型 e、 g.:http://localhost:9200/blog/posts,http://localhost:9200/blog/tags 在标签类型中,我创建了1000多个标签,并在posts类型中创建了10篇文章 e、 g:员额 { "_index":"blog", "_type":"posts", "_id":"1", "_versio

在我的弹性搜索服务器中,我有一个索引
http://localhost:9200/blog

(博客)索引包含多种类型

e、 g.:
http://localhost:9200/blog/posts
http://localhost:9200/blog/tags

在标签类型中,我创建了1000多个标签,并在posts类型中创建了10篇文章

e、 g:员额

{   
    "_index":"blog",
    "_type":"posts",
    "_id":"1",
    "_version":3,
    "found":true,
    "_source" : {
        "catalogId" : "1",
       "name" : "cricket",
       "url" : "http://www.wikipedia/cricket"
    }
}
e、 g:标签

{   
    "_index":"blog",
    "_type":"tags",
    "_id":"1",
    "_version":3,
    "found":true,
    "_source" : {
        "tagId" : "1",
        "name" : "game"
    }
}
我想将现有标记分配给博客文章(即relationship=>mapping)


如何将标签分配给POST映射?

在Elasticsearch中有4种方法可用于管理关系。Elasticsearch博客文章中对它们进行了很好的概述——我建议阅读整篇文章,以获得每种方法的更多详细信息,然后选择最能满足您业务需求的方法,同时保持技术上的适当性

以下是这4种方法的亮点

内部对象

  • 简单、快速、高效
  • 仅在维护一对一关系时适用
  • 不需要特殊查询
嵌套的

  • 嵌套文档彼此存储在相同的Lucene块中,这有助于提高读取/查询性能。读取嵌套文档的速度比等效的父/子文档快
  • 更新嵌套文档(父文档或嵌套子文档)中的单个字段会强制ES重新索引整个嵌套文档。对于大型嵌套文档,这可能非常昂贵
  • “交叉引用”嵌套文档是不可能的
  • 最适合不经常更改的数据
父母/子女

  • 子项与父项分开存储,但路由到同一个碎片。因此,父/子对象在读取/查询方面的性能比嵌套的稍差
  • 父/子映射有一点额外的内存开销,因为ES在内存中维护一个“连接”列表
  • 更新子文档不会影响父文档或任何其他子文档,这可能会在大型文档上节省大量索引
  • 由于Has-Child/Has-Parent操作有时不透明,因此使用Parent/Child进行排序/评分可能会很困难
非规范化

  • 你可以自己管理所有的关系
  • 最灵活、最具管理开销
  • 性能可能或多或少取决于您的设置

简洁明了的优点和缺点列表。说父-子查询的性能比嵌套查询的性能“稍差”可能会产生误导。从我们所看到的情况来看,根据指数的大小,它要差1-2个数量级。