让我用一个例子来解释我的问题。
假设我有三种不同类型的文档,其中包含一些常见字段,即book, song, magazin
name, author, publisher, pageNumber
等name, singer, publisher, length
等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)}
?
感谢您的回答。
答案 0 :(得分:8)
Lucene中不存在Elasticsearch的类型概念。
索引文档时,文档的类型会被编入索引。然后,当仅搜索某些类型时,Elasticsearch将隐式地将索引类型的过滤器添加到您的查询中。
因此,使用您的上一种方法,您将category
- 过滤加上到隐式_type:object
- 过滤器。从本质上讲,你没有在这里使用Elasticsearch的类型获得任何东西。