答案 0 :(得分:1)
Lucene使用多种功能对文档进行评分,但基本上评分依赖于文档与查询之间的相似性。我先前用或多或少的简单单词解释了文档之间calculating similarity的概念,所以让我在这里简单解释一下。
如果您有所有单词的词典,您可以将它们组织成长长的列表。数学家习惯于对任何序列使用术语“向量”,包括单词列表,所以我们称之为单词向量:
[abbat,about,bananas,...]
我们可以将我们集合中的每个文档也表示为向量,其中每个元素代表本文档中相应单词的出现次数。例如,如果文档出现1个单词“bananas”,2次出现“about”且没有出现“abbat”,则文档向量将按如下方式开始:
[0,2,1,...]
现在最有趣的部分来了。我们可以假设,如果2个文档有很多常用词,它们是关于类似的主题,如果它们的共同点很少,那么这些文档就大不相同了。由于我们已经知道文档可以表示为单词的向量,因此我们可以将文档的相似度计算为其向量的相似性。
有很多方法可以计算2个向量的相似程度。 Lucene使用非常简单的余弦距离。这个想法来自矢量的几何表示和它们之间的角度 - 如果你在2D空间中绘制2个矢量,你会发现这些矢量的坐标越相似,它们之间的角度越小。这是余弦距离的来源,但实际上你应该只关心2个文档中相同单词的数量。
当对搜索引擎进行任务时,查询被视为文档:为它们构建文档向量,然后用于从集合中查找最相似(即相关)的文档。