扁平化搜索复杂度

零

数字媒体
2021年5月6日

当我第一次开始为《Explore the Collections》进行后端开发时,我们的博物馆编目系统中保存的数据的复杂性让我印2022世界杯抽签完整视频象深刻,也让我不知所措。我们为每个博物馆对象暴露了近60个不同的字段——其中一些字段扩展为子字段列表,这些子字段又有自己的子字段。

为了说明这一点,让我们来看看数据为我们的著名的大卫演员阵容在铸院。

artistMakerPerson字段从API返回的摘录
David数据中复杂字段的快照

如果你对这件物品感兴趣,它的丰富性令人钦佩,而且很可能令人着迷。如果您希望以编程方式遍历一系列对象,那么复杂性可能会被视为一种拖累。

我们使用Elasticsearch存储和查询我们的数据。将搜索限制在artistMakerPerson中的相关字段需要使用嵌套搜索查询.例如,这种类型的搜索将使我们能够构造一个查询对象,其中“雕塑家”是“米开朗基罗”,而不是我们收藏中的许多其他雕塑家的对象。

嵌套搜索查询的一个缺点是它们增加了复杂性,因此在性能方面代价高昂。更重要的是,为了推断搜索者的意图,我们需要一个高级搜索界面。

你可以在她即将发布的文章中阅读我们的设计师的思考过程,特别是-希望消除对高级搜索功能的需求。

在探索集合时,我们没有强迫搜索者明确地陈述他们的意图,而是选择了对他们的需求进行广泛的解释,然后允许他们使用过滤器进行细化。2022世界杯抽签完整视频

例如,如果我们的搜索者进入银孔雀在搜索框中,我们无法推断他们是否在寻找这种美丽的东西Arthur ' Silver设计的孔雀羽毛织物,或者这个精致的壁灯或烛台,它描绘了一只“孔雀”,是银匠亚历山大·费雪制作的.然而,通过给出与银色和孔雀相匹配的物体的一般结果,前者可以通过过滤“人”来快速显示,后者则可以通过过滤“材料”来显示,但在这个过程中,我们打开了对偶然发现的探索。

在搜索界面中这种简化的结果是,当您输入术语时威廉•莫里斯你会看到归还的物品有纺织品设计师威廉·莫里斯(William Morris)的作品(或以其他方式与他有关),也有简·莫里斯(Jane Morris,刺绣师,威廉·莫里斯的妻子)和威廉·布莱克(William Blake,诗人和画家)等等。Elasticsearch对相关性进行了最好的评估,结果的第一页大部分都是与“威廉·莫里斯”有关的项目。

将搜索界面简化为单个搜索框有了大量的过滤器选项,我就不需要创建一个搜索API来维护复杂的嵌套数据结构的完整性了。显然,我们仍然需要在结果中保留复杂性,因为当你找到感兴趣的对象并查看更多细节时,你希望能够分辨出米开朗基罗是雕塑家,帕皮·克莱门特是铸造师。

这让我可以自由地创建一系列个性化的字段,其中底层对象的复杂性被平摊。例如,所有这些开发人员创建的字段都在API中用下划线表示_flatPersonsNameId为了将它们与真实的实物记录区分开来——实物记录是由学科专家填写的。

在David的例子中,新字段看起来像一个简单的字符串列表:

" _flatPersonsNameId ": [" A3843 -米开朗基罗"," AUTH345377 - Papi, Clemente ", " N582 -大卫国王的以色列(国王)"]

通过创建新字段,我们能够在API中公开额外的功能。举个例子,_flatPersonsNameId保存对象记录中提到的所有个人(以及他们受控制的术语id)—作为制造者或相关人员,甚至是内容。在这种情况下,它还包括以色列的大卫王,他是雕塑的主题。

通过将所有这些名称放在一个字段中,我们可以很容易地使用它们聚合或聚类结果,因此我们可以将“人员”列表作为筛选选项。

使用Person筛选器探2022世界杯抽签完整视频索集合

所以现在我们可以展示所有其他与以色列的大卫·金有关的物品了,我们有125件,包括一个来自童年博物馆的小挂坠盒。

一套惠斯特卡|未知| V&A探索集合2022世界杯抽签完整视频

我们已经在我们的V2 API中对这些自产的字段进行了有趣的研究。它使我们能够包含额外的功能,例如根据所描绘的事物聚合(然后过滤),甚至更具体地说,根据艺术品中所描绘的人聚合。

下面是一个显示描述项的搜索示例A8676,这是纺织品设计师威廉·莫里斯(William Morris)的专有名词:

http://api.vam.ac.uk/v2/objects/search?id_depicts=A8676&data_profile=full

虽然我们有909件物品将威廉·莫里斯作为制造商或其他相关人员,但我们只有16件物品描绘了威廉·莫里斯的形象。

这个功能不在我们主要的Explore the Collections用户界面中(也许在下一个版本中会出现——这取决于2022世界杯抽签完整视频用户研究的结果),但是它可以在我们的API中使用,因此开发人员可以在他们自己的应用程序中实现该功能。

关于组合id-name字段的简要说明

您可能已经注意到,我上面提到的新创建的字段是text和id的组合。这是因为Elasticsearch只会聚合单个关键字术语。我无法生成人员的聚合并返回他们的id和文本字段(或名称)。

对于我们的前端,我们想要返回文本字段(例如' William Morris '),但我们想要保留id的知识,以便我们可以使用该受控术语作为过滤器。我们的收藏中有两个人的名字都叫威廉·莫里斯(William Morris),所以如果我们的搜索者确认他们只对玻璃雕塑家“A1324”威廉·莫里斯(William Morris)感兴趣,我们就不想过滤这个名字。

通过创建这个组合字段,它是一个关键字列表[' A1234 -威廉·莫里斯'], Elasticsearch自然会在聚合中返回整个值。然后将结果解析回组件id和文本字段是一个简单的过程。

到目前为止,没有评论,查看或添加您的

添加评论

请参阅我们的隐私政策了解我们如何处理您的数据。

会员

现在就加入,享受无限制免费参观所有V&A展览、会员预览等

了解更多

商店

在我们令人难以置信的独家礼品、珠宝、书籍、时装、印刷品和海报等中寻找灵感……

世界杯2022赛程时间表
Baidu
map