我需要将由电影,电视节目,剧集,电视频道和直播节目信息组成的视频目录建模为Elasticsearch。这些实体中有些是相关的,有些则没有。 即使有一些共同的属性,这些实体的属性也大不相同。
现在,由于我可能需要查询交叉实体,请想象一个客户搜索可能是电影,电视频道或现场活动节目的场景的情况,最好是让一个索引包含一个通用实体标有逻辑类型属性,还是最好有多个索引,每个实体1个(电影,电视节目,频道,节目)? 此外,其中某些实体(例如电影)可以将元数据属性具有多种语言。
从关系数据模型数据库中,我将创建不同的索引,每个实体一个,而每种语言都有一个语言变体索引。为了提高搜索性能和可用性,有什么建议或更好的方法吗?
答案 0 :(得分:1)
是否使用多个索引取决于应用程序,因此我无法提供确切的答案,而是一些想法。
根据我的经验,索引不是数据建模而是帮助维护和操作的一种方法。例如,与从较大索引中的一个来源删除所有文档相比,删除索引要容易得多。或者,如果您支持完全独立的搜索应用程序,而这些应用程序不对彼此的数据进行 not 查询,则可以采用不同的索引。
但是,当您要查询跨数据源的文档时,将它们保留在一个索引中很有意义。如果只是为了对索引中的所有项目具有可比的排名。确保在数据中重复使用含义相似的字段(标题,制作年份,艺术家等)。对于源唯一的字段,我们通常使用带前缀标记的字段名称,例如movie_...
用于仅电影的元数据。
对于语言,您需要使用特定于语言的字段,例如title_en,title_es,title_de。理想情况下,在查询时,您会知道用户的语言(从浏览器,因为他们是明确选择的,...),然后在可用的语言特定字段中进行搜索。在查询和索引编制时,请务必对这些字段使用特定于语言的分析器。
我觉得搜索引擎有点像数据库的双重功能:数据库可以存储数据,但也可以为其编制索引。搜索引擎可以为数据建立索引,但也可以存储数据。数据库倾向于规范化架构以消除冗余,搜索引擎最适合使用非规范化数据来提高查询性能。