【发布时间】:2010-11-03 20:05:35
【问题描述】:
我想知道,全文搜索系统是如何实现的,以便能够查询 数以百万计的条目非常快? 请注意:我不是谈论通过在空格处分隔内容来标记内容的系统,而是谈论能够 甚至查询令牌中间的部分(这是一个真正的挑战)。
背景信息
我尝试了一个自制的字符串缓存器(使用 Java),它能够搜索
对于字符串,给定一个子字符串作为查询。子字符串 不是 必需的
位于可能检索到的字符串的开头。
它适用于大量字符串。
使用 aTreeMap<Character,TreeSet<String>> 完成缓存。
添加条目
对于待添加字符串中的每个唯一字符:
获取该字符的集合,并将字符串添加到其中。
示例:“test”首先拆分为“t”、“e”、“s”。
然后,我们检索这些集合
三个键,并将“测试”添加到每个集合中。
查询
查询是通过将查询拆分为唯一字符来完成的,
为每个字符检索一个Set<String>,建立一个交集
所有集合,最后使用contains()搜索交叉点以确保正确
查询字符的顺序。
基准测试
在 3GHz 机器上,我添加了 2'000'000 字符串 平均长度
共 10 个,随机内容。
完成 100 个查询。耗时:最小值:0.4 秒,平均值:0.5 秒,最大值:0.6 秒。
1.5GB 内存被浪费了。
【问题讨论】:
标签: java caching indexing full-text-search