Elasticsearch - 跨多种类型的搜索效率

时间:2013-12-30 10:11:57

标签: mapping elasticsearch

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

  • 图书 name, author, publisher, pageNumber
  • 歌曲 name, singer, publisher, length
  • Magazin name, company, publisher, pageNumber等。

如您所见 name publisher 字段是所有三种类型文档的公共字段。 pageNumber Magazin Book 的功能。其余的字段独立于其他类型的文档。

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

  • 使用单个类型,例如 对象 ,其中category 图书 >, 歌曲 Magazin )字段。我首先创建索引时给出映射详细信息。因此,在此选项中,书籍将包含长度字段,但它将为空,因为它不是书籍功能。

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

我的查询和方面将在常用字段上。以下哪种方法会有较少的查询和方面时间?

/index/book,song,magazin/ -d {myQuery}效率高于。{1}} /index/object/ -d {myQuery && (category = book || category = song || category = magazin)}

感谢您的回答。

1 个答案:

答案 0 :(得分:8)

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

索引文档时,文档的类型会被编入索引。然后,当仅搜索某些类型时,Elasticsearch将隐式地将索引类型的过滤器添加到您的查询中。

因此,使用您的上一种方法,您将category - 过滤加上到隐式_type:object - 过滤器。从本质上讲,你没有在这里使用Elasticsearch的类型获得任何东西。