Meilisearch:一张空白画布

大家好!正如你们中的一些人可能知道的,我最近加入了Meilisearch,担任开发者布道师。我的工作一部分是回答问题,帮助社区,所以我过去几个月的首要任务就是了解Meilisearch。我认为学习新软件的最佳方式是像任何开发者一样使用它:构建一些东西。所以,我开始制作一个演示。
这个演示是在Meilisearch的最新版本v0.19时创建的,由于Meilisearch新版本中添加了新功能,本博客文章中描述的一些变通方法已不再需要。
Meilisearch 与 现代艺术博物馆 (MoMA)
第一步是找到一个我喜欢使用的优质数据集。在多次未能成功驾驭一些非结构化数据集后,我偶然发现了现代艺术博物馆 (MoMA) 的藏品存储库。真是幸运的发现!他们有两个数据集:艺术家和艺术品。我决定选择艺术品数据集,因为它包含每件艺术品的所有基本信息:标题、艺术家、尺寸、媒介,甚至是艺术家的生平。但最棒的部分是它以 JSON 格式提供!无需转换,无需恢复 MongoDB 转储,无需抓取:Meilisearch 已就绪 😀
我使用Meilisearch JavaScript来创建索引、添加文档和自定义设置。对于前端,我决定使用Instant Meilisearch,并结合Vue InstantSearch,如meilisearch-vue 仓库中所述。我有点懒,所以如果我找到一个毫不费力就能提供出色结果的工具,我就会使用它!幸运的是,InstantSearch 提供了所有前端工具,可以随意自定义搜索环境,因此您只需几行代码即可体验 Meilisearch 的强大功能及其即时搜索功能。最后,我尝试添加一些不错的样式,但那不是我的强项 😅 我为视觉设计提前道歉!
您可以在此处查看结果。
解决问题
所以,我找到了一个数据集,将其索引到 Meilisearch 实例中,并为搜索设置了前端。都搞定了,对吧?不完全是;现在是时候迭代并让搜索结果感觉良好。
我很幸运能找到一个结构化的 JSON 数据集,它与 Meilisearch 配合得很好。然而,我不得不做一些小的更改,以便更好地显示结果。由于 Meilisearch 的自动高亮显示对存储在数组中的查询结果不起作用,我必须在添加它们之前将数组值转换为字符串。
我还想允许用户按日期对结果进行排序。由于日期字段没有标准格式,我必须检索年份并将其存储在一个新的“sortByDate”字段中。然后又出现了一个问题:Meilisearch 不支持查询时排序(至少目前还不支持)!为了规避这个问题并实现此功能,我创建了另外两个索引,并使用了自定义排序规则 desc(DateToSortBy) 和 asc(DateToSortBy)。每次您在下拉菜单中更改排序选项时,Meilisearch 实际上是在一个完全不同的索引中进行搜索,但它的速度非常快,以至于人眼无法察觉这种变化 🤯
这里您可以看到排序的实际效果
🧐 你可能已经注意到我说 Meilisearch 还不支持查询时排序——那是因为它是我们公开路线图上最受请求的功能之一,并且现在正在考虑中 🥳 所以如果你还没做,快来看看 Meilisearch 的路线图,为你最喜欢的功能投票或提交你自己的想法吧!👉 更新说明:查询时排序已随 Meilisearch v0.22 发布。
创建这个演示中最具挑战性的部分是处理一个包含 138,151 个文档的未知数据集,因为大量的文档使得很难知道不同字段的可能值和长度。我最初希望用户能够按“媒介”(例如“摄影”或“绘画”)过滤结果。直到我意识到有些艺术品的“媒介”字段有许多行长!以这个为例:
"H (卷 IX): 封面带有克柳恩在正面的石印手稿文字;1 张特伦特耶夫的石印插图;石印手稿文字。L (卷 XIII): 封面带有基里尔·兹丹涅维奇在正面的石印插图和手稿设计;石印手稿和打字文字。M (卷 XIV): 封面带有基里尔·兹丹涅维奇在正面的石印手稿设计和插图;石印手稿和打字文字。P (卷 XVII): 封面带有冈察洛娃在正面的石印手稿设计;以及米哈伊尔·普斯蒂宁和奥尔加·奥列沙-苏奥克石印手稿文字"
你能想象把它作为分面筛选器吗?对用户界面来说不太友好……
接近完美
制作这个演示最简单的部分是设置 Meilisearch。一旦我决定了哪些属性需要显示和可搜索,剩下的就轻而易举了。除了上面提到的高亮显示和排序问题外,我最后更改的是属性排名顺序。默认情况下,属性排名顺序是根据第一个索引文档中属性的出现顺序自动生成的。在我的案例中,第一个属性是`title`,这意味着在`title`字段中包含匹配查询词的艺术品将排在结果列表的首位。这提供了不错的结果,但我非常确信我可以做得更好。
我不仅要考虑哪些属性对这个特定数据集最重要;我还要考虑哪些类型的查询更有可能被提出。如果用户使用艺术品的标题查询特定的艺术品,他将得到相关的结果,因为所使用的词语不太可能出现在许多其他字段中。然而,如果用户查询著名艺术家的名字,这个名字很可能会出现在艺术品标题中,例如作为致敬。所以我决定将`artist`放在可搜索属性列表的顶部。在我进行更改之前,这是您在搜索“梵高”时会在第一个结果中找到的内容
正如你所看到的,这是一件由一位名叫威廉·雅各布·亨利·贝伦德·桑德伯格的艺术家创作的艺术品,作品标题中出现了“梵高”这个名字,但它并不是真正的梵高作品。
现在,在更改了设置中可搜索属性的顺序后,第一个结果确实是文森特·梵高创作的艺术品
像这样简单的更改可以极大地影响搜索结果,真是太神奇了。Meilisearch 开箱即用就非常相关,但它允许您根据自己的需求调整结果的相关性,这对于为最终用户提供出色的体验至关重要。
一次开源的博物馆体验
演示源代码可在 GitHub 上获取。欢迎随意玩转它,并向我展示你能做出什么!😁
我们能够访问这份非凡的目录,真是太酷了!感谢 MoMA 的慷慨,您可以在世界任何地方探索博物馆。现在,有了 Meilisearch,它距离您只有 50 毫秒之遥 🚀