我有一个网站,其中文档保存在 xml 文档中,所有文档都具有相同的结构。
我需要一个搜索引擎,我可以在其中根据搜索用户给出的关键词选择相关性最高的文档。
我认为使用 XQuery 而不是将信息存储两次(在 XML docs + mysql 数据库中)并查询 mysql 数据库以进行相关性搜索可能是一个好主意。
XQuery 对此有什么好处吗?在每个大约 7kb 的 +1000 个文档上,我可以期望什么速度?
感谢您的时间。
亲切的问候
我有一个网站,其中文档保存在 xml 文档中,所有文档都具有相同的结构。
我需要一个搜索引擎,我可以在其中根据搜索用户给出的关键词选择相关性最高的文档。
我认为使用 XQuery 而不是将信息存储两次(在 XML docs + mysql 数据库中)并查询 mysql 数据库以进行相关性搜索可能是一个好主意。
XQuery 对此有什么好处吗?在每个大约 7kb 的 +1000 个文档上,我可以期望什么速度?
感谢您的时间。
亲切的问候
如果您有 +1000 个文档正在被搜索给定查询,那么使用 jQuery 或 SQL 数据库效率不高。
1)在每个文档中对每个关键字进行顺序搜索将带您不少于 # 文档 * 每个文档中的单词 # * 关键字 #
2) 每次您进行搜索时,都必须再次扫描每个文档。如果您有一个涉及多次搜索的项目,这是不可行的。
3) 顺序搜索不能让您根据找到的单词数和文档中的单词总数、重要性或每个单词等对结果进行排名...
更好的选择是使用倒排索引数据结构提前“索引”您的文档和单词。
这样,您将预先做一些工作来索引每个文档中的每个单词,但是在进行实际搜索时会节省大量时间(这很重要)。
另一个优点是您将能够以非临时方式对文档进行排名。请参阅向量空间模型。
如果您想要 XML 文档的搜索解决方案(仅搜索而不是复杂的文档事务),那么我建议您使用 Apache - Lucene 搜索引擎。
最新的 Apache Lucene 3.x 版本提供了血统搜索功能。
最重要的是,您可以使用 Apache-Solr,它使用 lucene 作为搜索引擎,具有所有管理功能、分面浏览和有效负载。(注意:Lucene 实现也适用于所有 .NET、Java、Python、Ruby 语言)。
如果您想要一些真正基于 XQuery 且具有开源性质的解决方案 - 考虑到您的文档量,请尝试使用 eXist Xml 数据库。在 eXists 数据库中加载所有 Xml 文档,然后使用 XQuery。但是这种方法需要 -