第 7 章:搜索 搜索
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
寒假即将来临,你们 ElectricHarmony 团队决定在整个 12 月份开展一项挑战,以提高用户参与度。你们举办了一次头脑风暴研讨会,然后投票选出最佳创意。今年的获胜创意是为期 30 天的歌曲挑战(见图 7-1)!
图 7-1. 30 天歌曲挑战
挑战的目标很琐碎--每天都有一个主题标签,用户在社交媒体上分享与之相关的歌曲。挑战固然有趣,但您的团队希望借此了解用户的个性,因为每个人对歌曲的理解都不尽相同。同样有趣的是,"童年 "等标签如何揭示个人与音乐的联系:有人可能会这样标记一首齐柏林飞艇乐队的歌曲,因为这首歌是他们早期记忆的一部分,而不管这首歌是什么时候发行的。
为了测试这个想法,您决定在内部进行挑战。你们立即遇到了一些与在数据库中查找曲目有关的问题。例如
-
搜索部分曲目名称(如
heaven)无法找到 "Stairway to Heaven "曲目。 -
英语方言的变化:搜索
colour找不到color。 -
搜索是区分大小写的,因此用户需要准确了解曲目名称在数据库中的存储方式。第一个字母大写?小写?全部小写?可能的变化太多了!
本章将向您介绍如何存储和查询文本数据,以最大限度地提高搜索结果的相关性。这是一个引人入胜的话题,因为根据简单的文本输入为用户提供准确的相关结果既是一项极具挑战性的工作,也是一项回报丰厚的工作。本章将向你介绍用于搜索的各种数据结构和算法,以及它们如何为强大的搜索系统增添自身的价值。虽然本书是关于 Neo4j 的,但许多内容都是基于 Apache Lucene 的搜索技术的基础,如 Solr 和 Elasticsearch,因此这些技术的用户会在这里找到熟悉的概念。
什么是搜索?
想象自己在一家黑胶唱片店里。每个架子上都标有一个字母,表示该架子上有以该字母开头的艺术家的唱片。你来到代表 "字母 "的 "L "条带架前,开始挖掘黑胶唱片,直到最终找到你最喜欢的乐队:齐柏林飞艇乐队。
整个体验就是一种搜索!假设你带着疑问进入商店。店里有一套系统可以帮助你高效地找到东西。你要么找到想要的唱片,要么空手而归。如果你找到了歌手,你可能会注意到同一条带的其他专辑--与你最初意图一致的建议。
文本
您希望哪些文本元素可用于搜索?与查找相比,并不是每个文本都可以进行搜索。您的团队正在寻找存储为节点或关系属性的文本。相比之下,您的图表中的轨道标识符可能不是您想要搜索的内容。用户不太可能只想通过在搜索栏中键入三四个字符来检索1FTSo4v6BOZH9QxKc3MbVM 。
但是,即使用户的查询只包含部分内容,曲目标题中包含的文本也是必须找到的。例如,在搜索栏中键入start 就会返回滚石乐队的 "Start Me Up"、黑眼豆豆乐队的 "Let's Get It Started "或神童乐队的 "Firestarter"。
以下用例可识别符合搜索条件的文本:
-
查找以搜索查询开始、包含搜索查询、以搜索查询结束或与搜索查询相同的文本。例如输入 "Love "会返回 "Love Me Do"(开始于)、"All You Need Is Love"(结束于)和 "Crazy ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access