当前位置:编程学习 > C#/ASP.NET >>

关于lucene、全文检索、搜索引擎、倒排索引的疑问

全文检索使用倒排索引,根据单个关键词查找多个文档。
我的疑问是在查询多个词的时候,是怎么个情况呢?

据我所知的倒排索引应该是类似这样的:

关键字1:文档1,文档2,文档3,文档4
关键字2:文档1,文档3,文档5,文档7
关键字3:文档2,文档4,文档6,文档8

如果查找多个关键词的时候是什么情况呢?而且还要通过相关度排序。

例如查找:“关键字1”&“关键字3”的情况。
我猜想是先找到“关键字1”对应的全部文档,
然后拿出来一个一个的和“关键字3”匹配过滤、计算相关度,
最后根据相关度排序。
但我觉得这种办法效率是不是很理想。

希望大神们指点一下,lucene是怎么做的,百度谷歌等搜索引擎是怎么做的呢? lucene 全文检索 --------------------编程问答-------------------- 具体实现我没有看过,但是大致应该是这样。

搜索引擎首先会对你的关键字做排序,稀罕的放在前面查询,然后过滤后面的。

比如你查询“世界 编程 倒排索引”,那么倒排索引的稀罕程度高于编程,编程高于世界。

再说,越普通的关键字,被查询的概率就越高,比如范冰冰比图灵搜索的几率要大很多,包含其结果的网页也多很多,基于此,搜索引擎可以缓存或部分缓存常见关键字的查询。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
具体实现我没有看过,但是大致应该是这样。


我试过搜索引擎查询最奇怪的组合,就比如“范冰冰”“图灵”,
搜索引擎给力的在一瞬间返回了查询结果,
不敢相信在这么短的时间内,把2个这么大的集合做了并集运算呀。 --------------------编程问答--------------------
引用 2 楼 u012468672 的回复:
Quote: 引用 1 楼 caozhy 的回复:

具体实现我没有看过,但是大致应该是这样。


我试过搜索引擎查询最奇怪的组合,就比如“范冰冰”“图灵”,
搜索引擎给力的在一瞬间返回了查询结果,
不敢相信在这么短的时间内,把2个这么大的集合做了并集运算呀。


不需要啊。搜索引擎只返回任意的前n条结果。 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
不需要啊。搜索引擎只返回任意的前n条结果。

我感觉结果并不是任意的,而是根据相关度排序的。
即使是查找只找到第一条,
在“图灵”集合文档中中找出有包含“范冰冰”的第一条,
时间复杂度应该是O(N)吧。 --------------------编程问答-------------------- 是啊。搜索引擎算法的哲学和别的算法不同,它强调性能和结果的平衡,也就是在性能允许的范围内,返回相对较好的结果,而不是绝对最优的匹配。 --------------------编程问答-------------------- 非常感谢,我大概明白您的意思了。 --------------------编程问答-------------------- 当是我觉得,从几千万条里找范冰冰,不是很理想啊。
不知道有没有别的思路呢。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,