【问题标题】:Elasticsearch - Efficiency of search across multiple typesElasticsearch - 跨多种类型的搜索效率
【发布时间】:2017-12-22 16:04:17
【问题描述】:

让我用一个例子来解释我的问题。 假设我有三种不同类型的文档,其中包含一些常见字段,即book, song, magazin

  • name, author, publisher, pageNumber等。
  • 歌曲name, singer, publisher, length等。
  • 杂志name, company, publisher, pageNumber等。

如您所见,namepublisher 字段是所有三种文档类型的通用字段。 pageNumberMagazinBook 的功能。其余字段独立于其他类型的文档。

我会将这些数据存储在同一个索引上。我也可以存储这些数据,

  • 只有一个类型,例如 Object,它有一个 categoryBookSongMagazin)字段。我在首次创建索引时提供映射详细信息。因此,在此选项中 book 将具有长度字段,但它将为空,因为它不是 Book 功能。

  • 或 _type 字段上的三种类型的文档。

我的查询和构面将位于公共字段上。以下哪种方法的查询和分面时间更短?

/index/book,song,magazin/ -d {myQuery}/index/book,song,magazin/ -d {myQuery} 更有效吗 /index/object/ -d {myQuery && (category = book || category = song || category = magazin)}?

感谢您的回答。

【问题讨论】:

  • 唯一知道的方法是生成一些测试数据并自己进行基准测试。如果不这样做,你将只剩下一个宗教决定,基于信仰而不是事实,被任何类型的皈依者引导走这条或那条道路,以首先吸引你。

标签: mapping elasticsearch


【解决方案1】:

Lucene 中不存在 Elasticsearch 的类型概念。

索引文档时,文档的类型会被索引。然后,当只搜索某些类型时,Elasticsearch 会隐式地为您的查询添加一个针对索引类型的过滤器。

因此,使用您的最后一种方法,除了隐式 _type:object-filter 之外,您还可以使用 category-filter 。从本质上讲,如果在此处不使用 Elasticsearch 的类型,您不会获得任何好处。

【讨论】:

  • 这对了解很有帮助
猜你喜欢
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多