前言:
由于新版本的产品已经上线,但是还没有一个搜索的功能,做一个搜索模块出来是当务之急。新的搜索模块将同时实现两个功能,搜索商品,与搜索店铺及品牌。搜索商品关键词部分由陈哥寻找开源的搜索引擎。另一部分由我来修改wand算法,找到与关键词最匹配的店铺。
我的github:
我实现的代码全部贴在我的github中,欢迎大家去参观。
https://github.com/YinWenAtBIT
一、算法简介:
1.1算法来源:
算法的出处来自与Efficient Query Evaluation using a Two-Level Retrieval Process,这一篇论文,最初直接阅读论文之后,没能立刻理解算法,原因在于对于搜索算法中的idf,tf,posting list等等概念,以及其数据结构的不甚了解,看论文中的伪代码不能看明白。于是直接找了已有的介绍wand算法的博客:http://www.cnblogs.com/daremen/archive/2013/08/29/3289694.html
在仔细阅读完其博客之后,彻底明白了wand算法的运作方式。
1.2算法简介:
WAND全称Weak AND或者Weighted AND,主要用于计算文档之间的相似度。IR中与文档相似度相关的几个概念
倒排索引
在向量空间模型中一篇文档(document)通常会表示为词(term)的向量,比如这样的三个文档:
d1: I love you.
d2: I hate you.
d3: I miss you.
表示为: d1 = [1, 1, 0, 0, 1], d2 = [1, 0, 1, 0, 1], d3 = [1, 0, 0, 1, 1]。 向量位置依次表示[I, love, hate, miss, you],其中1表示在文档中出现,0表示没有出现。
上面是文档表示,其相应的倒排索引可以表示为:
I: [1, 2, 3]
love: [1]
hate: [2]
m