倒排索引
倒排索引中的索引指的是什么 #card
- term 到 item_id 列表的映射
用户输入搜索query后,系统如何从库中找到命中query词的商品?暴力的方法是先对query进行分词得到每个query的term,而后遍历每个商品信息的每个term词,如果query term在商品信息中全部命中,则召回该商品。这种暴力方法有显而易见的效率问题:#card
- 每次搜索都要有QNL次term匹配计算(Q: query 平均term数,N:商品数,L:商品信息平均term数)。
简单举例来说:假设有三个文档,“Winter is coming.”, “Ours is the fury.” 和 “The choice is yours.”, 经过简单的文本预处理(大小写转换、删除特殊字符、分词等),可以建立起如图所示的“倒排索引”。#card
-
倒排索引是文档term到包含该term文档id的字典,基于字典数据结构的hash机制,可以快速找到包含指定term的文档id集合。
-
可用搜索引擎如基于Lucene库的Elasticsearch