如果输入“百度 知道”这四个字,对你来说可能是两个关键字,但对于Lucene来说,这就是一个字符串,是一个查询条件。关于命中的问题,就需要了解下Lucene内部是怎么工作的:
首先,Lucene会对输入的内容进行分词,用不同的分词器会出现不同的结果,举个例子:分词器将它分成了“百度”和“知道”两个词。
然后,Lucene会在索引中去找包含着两个词的内容。将符合条件的集合送入下一步。
再然后就是排序,如果不指定排序规则,默认是按权重排序的。比如文章A同时包含“百度”和“知道”,文章B仅包含“百度”,那么A肯定会排在B的前面。也就是说,Lucene会找到所有和搜索条件相关的内容,然后按它所理解的相关性排序。先理解下就好,如果想知道具体的实现,请了解下Lucene的权重,这是比较重要的一部分。
最后,分页并返回结果。