搜索主要分为以下几步
第一步:用户输入查询语句
查询语句同我们普通的语言一样,也是有一定语法的。
不同的查询语句有不同的语法,如SQL语句就有一定的语法。
查询语句的语法根据全文检索系统的实现而不同。最基本的有比如:And,Or,Not等。
举个例子,用户输入语句:lucene and learned not hadoop
说明用户想找一个包含lucene 和learned 然而不包括 hadoop的文档
第二步:对查询语句进行词法分析,语法分析,及语言处理。
由于查询有语法,因而也要进行词法分析,语法分析,及语言处理。
1.词法分析主要用来识别单词和关键字。
如上述例子中,经过词法分析,得到有lucene,learned,hadoop,关键字有 and,not。
如果在词法分析中发现不合法的关键字,则会出现错误。如lucene amd learned ,其中由于 and拼错,导致amd作为一个普通的单词参
与查询。
2.语法分析主要是根据查询语句的语法规则来形成一颗语法树
如果发现查询语句不满足语法规则,则会报错。如 lucene not and learned ,则会出错。
如上述例子,lucene and learned not hadoop 形成的语法树如下:
第四步:根据得到的文档和查询语句的相关性,对结果进行排序
虽然在上一步,我们得到了想要的文档,然而对于查询结果应该按照与查询语句的相关性进行排序,越相关者越靠前。
如何计算文档和查询语句的相关性呢?
不如我们把查询语句看做是一篇短小的文档,对文档与文档之间的相关性进行打分,分数越高的相关性越好,就应该排在前面。
贴上一篇讲的比较好的文章