【问题标题】:ElasticSearch - Is Parent Child relationship the best approach?ElasticSearch - 父子关系是最好的方法吗?
【发布时间】:2018-03-16 07:17:35
【问题描述】:

问题:

我有两种类型的存储库,一种是文档,另一种是页面。文档和页面之间存在关系。您可以将它们视为具有 1 页或更多页的文档(书)。实际上,我可能需要从符合某些条件的文档中查询页面,反之亦然。所以我要说的是,如果不是全部来自文档匹配的页面,我有时可能会查询某些页面。

目前,我已经在 Parent 中创建了一个父子关系,我已经为文档编制了索引,在 Child 中,我已经参照文档为页面编制了索引。

但是我们的设置存在性能问题,随着文档的增加,搜索和索引查询变得非常缓慢。我还发现不推荐使用父子关系,因为弹性搜索site很耗时。

是否有任何其他数据建模可用于解决此问题。

【问题讨论】:

  • 对于 sql,你的方法是完美的,但 elasticsearch 不支持像这样的连接,所以如果你这样做会导致性能问题。我的建议是不要进行规范化,而是通过嵌入文档将这两个保存在一个索引中
  • @ArpitSolanki 你建议使用嵌套类型吗?我知道 SQL 非常适合这种方法,但问题是页面包含文本数据,而 Elasticsearch 最适合文本数据。所以只有我继续使用 ElasticSearch

标签: elasticsearch parent-child


【解决方案1】:

是的。在页面对象中索引您在文档中的所有信息。 如果我换一种说法:在索引时间而不是搜索时间加入。

【讨论】:

  • 问题是有时我只想查询文档而不是页面。因此,如果我在查询期间将它们嵌入索引时间,我将得到重复值。在索引期间,我将为文档的页面提供相同的重复值。
  • 是的。可以 IMO 复制信息。如果您需要搜索页面,请索引页面。如果您还需要搜索文档,请索引文档。
  • 但是当我在页面索引中单独查询文档时,我会得到重复,然后我需要运行唯一的命令,这反过来又很慢。即)查询页面匹配搜索条件的文档。
  • 没有。您为页面创建索引,为每个文档创建索引。然后搜索其中一个。或两者兼而有之,但您可以提高“最喜欢”的结果。
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多