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

标签 mapping elasticsearch

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

  • Bookname, author, publisher, pageNumber etc.
  • Songname, singer, publisher, length etc.
  • Magazinname, company, publisher, pageNumber etc.

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

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

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

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

我的查询和构面将在公共(public)字段上。以下哪种方法的查询和分面时间会更少?

/index/book,song,magazin/-d {myQuery} 是否比 /index/object/-d {myQuery && (category = book || category = song || category = magazin)} ?

感谢您的回答。

最佳答案

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

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

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

关于mapping - Elasticsearch - 跨多种类型的搜索效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837387/

相关文章:

json - 我如何嵌套嵌套(Elasticsearch映射)

objective-c - 映射 RestKit 后响应

nhibernate - Nhibernate 中多对多集合的更新导致连接表中的多次删除

javascript - 如何在javascript中对两个对象和数组进行映射

用于显示哪些键盘输入输出的 Linux、Unix 或 OS X 工具?

javascript - spring mvc 如何从网页内容加载js和css文件

elasticsearch - Kibana 和 _source 字段,Elastic 版本 6.7

python - 使用Python的Elasticsearch批量响应

Elasticsearch 基数聚合给出完全错误的结果

elasticsearch - 查询中的三个条件