0

我需要将一个由电影、电视节目、剧集、电视频道和直播节目信息组成的视频目录建模到 elasticsearch 中。这些实体中有些是相关的,有些则不是。这些实体的属性是完全不同的,即使有一些共同的。

现在,由于我可能需要查询跨实体,想象一下客户搜索可能是电影、电视频道或现场活动节目的场景,最好有 1 个包含标记为通用实体的单一索引一个逻辑类型属性,还是最好有多个索引,每个实体(电影、节目集、频道、节目)1 个?此外,其中一些实体(如电影)可以具有多种语言的元数据属性。

来自关系数据模型数据库,我将为每个实体创建不同的索引,并为每种语言创建一个语言变体索引。为了获得出色的搜索性能和可用性,有什么建议或更好的方法吗?

4

1 回答 1

1

是否使用多个索引很大程度上取决于应用程序,因此我无法提供明确的答案,而是提供一些想法。

根据我的经验,索引与其说是数据建模,不如说是帮助维护和操作的一种手段。例如,删除一个索引比从一个更大的索引中删除一个来源的所有文档要容易得多。或者,如果您支持完全独立的搜索应用程序,它们不会查询彼此的数据,那么不同的索引就是要走的路。

但是,当您想要跨数据源查询文档时,将它们保存在一个索引中是有意义的。如果只是为了在您的索引中的所有项目上具有可比的排名。确保在您的数据中重复使用具有相似含义的字段(标题、制作年份、艺术家等)。对于源独有的字段,我们通常使用前缀标记的字段名称,例如movie_...仅用于电影的元数据。

至于您需要使用语言特定字段的语言,例如 title_en、title_es、title_de。理想情况下,在查询时,您知道用户的语言(来自浏览器,因为他们明确选择了它,...),然后在可用的语言特定字段中搜索。确保在查询和索引时对这些字段使用特定于语言的分析器。

我认为搜索引擎有点像数据库的双重性:数据库存储数据但也可以索引它。搜索引擎索引数据,但也可以存储它。数据库倾向于规范化模式以消除冗余,搜索引擎最适合使用非规范化数据来提高查询性能。

于 2018-06-28T07:09:50.910 回答