小弟最近开发一个站内搜索模块,需要查询的信息在站内资源文件中,比如有部分文本信息在 .doc 或 .txt 文件中。如果用户每次查询都去做同样分析工作我觉得太浪费时间和资源。所以小弟准备将已经查询到的文件信息与关键词相对应,存放到一个特有的磁盘文件中,形成目录索引,以提高搜索效率。
    现在比较迷惑的是,到底是用文件数据库(如:Lucene)还是是用嵌入式数据库(如:Oracle 的 JE),他们之间区别是什么,选用的理由是什么(比如是出于线程安全考虑,分布式考虑等等)。请各位大侠不吝赐教,小弟感激不尽!

解决方案 »

  1.   

    对oracle的je不了解,等待高手
      

  2.   

    数据库偏重于数据存储管理,搜索并不是强顶(尤其是大量数据的情况下)。相反,Lucene对于数据存储却不是那么完美,例如让Lucene存储一个.doc文件,它必须要通过第三方工具将文件转成文本格式(或者说String对象),很显然其中如表格、图片、分段,甚至字体信息都会丢掉。但它的搜索功能是非常强大的,楼主并不需要自己创建目录索引磁盘文件,它的核心工作就是创建索引和搜索。
    因此Lucene最好做索引和搜索工作,存储可交给数据库,或者直接存成物理。
    线程安全两者都差不多,分布式可能是数据库占优。上述分析都是基于性能考虑的。如果站内要搜索的数据库不是很多,就选用楼主所说的嵌入式数据库吧。
      

  3.   

    其实oracle也支持对word之类文件的全文检索的。
    lucence是专门的全文检索工具,而且是开源的,你可以改它的代码。如果选oracle,万一某种文件格式他不支持就惨了。4楼已经说的很清楚了。我给个oracle全文检索的参考连接吧:http://epub.itpub.net/4/1.htm