搜索单位、词项与倒排索引
解释原文怎样形成可检索表示,词项怎样连接到候选记录。
先确定搜索返回什么
搜索单位可以是一份文档、一节、一段或一条记录。单位太大时,一个词的匹配可能把大量不相关内容带回;单位太小时,结果可能缺少解释所需的上下文。应保留单位身份、所属来源、位置和版本,使结果可以返回原文。
检索表示从源内容导出。例如标题、正文和标签分别形成字段;正文经过字符规范化、分词和词形处理形成词项。展示原文和索引表示可以不同,但这种变换应有可追溯关系。
倒排把词项接到记录
设三项记录为“共享状态”“共享文档”和“文档查询”。按这里预先给定的词项切分后,倒排表为:共享→1、2;状态→1;文档→2、3;查询→3。查询“共享 文档”要求两词都出现时,候选是两个列表的交集,即记录 2;允许任一词时,候选是并集 1、2、3。
这张表存的是“词项出现在哪里”,称为倒排索引。工程实现还可以保存词频、位置和字段。词频用于某些排名,位置用于短语或邻近匹配,字段区分标题和正文。压缩和跳跃访问可以减少需要扫描的列表部分,具体结构依引擎实现。
分析规则决定可以匹配什么
索引和查询需要兼容的分析规则。将大写和小写统一可能帮助缩写匹配;将词形统一可能连接不同形式;停用词移除可能降低存储,却会影响短语和短查询。中文连续字符还需要决定词项边界,按字、词或字符片段建立表示会得到不同候选。
例如查询包含一个原文中连续的四字词,按单字建立索引可能只表达四个字出现过;要确认连续顺序,需要位置或短语规则。按词分析能表达完整词,但分析器没有识别这个词时可能漏掉;字符片段增加部分匹配,候选和索引规模也会变化。
字面匹配有清楚的保证边界
若某个精确标识被分析器拆开或移除,关键词检索可能找不到它。标识字段可以保留不分词表示,正文采用另一套分析。不同字段无需套用同一规则。
检索索引是原始信息的派生表示。它可以包含更多便于查找的信息,也可能丢失标点、顺序或格式。判断一个结果能否支持后续任务,需要回到原文和来源条件。
倒排的构造与集合匹配参见 Manning、Raghavan、Schütze 的原作者教材 Introduction to Information Retrieval:Boolean retrieval。PostgreSQL 的 Full Text Search Introduction提供分析表示的具体实现例子。以上三记录是教学示意,没有作为检索效果实验。
最后更新于