0

我有一个网站,其中文档保存在 xml 文档中,所有文档都具有相同的结构。

我需要一个搜索引擎,我可以在其中根据搜索用户给出的关键词选择相关性最高的文档。

我认为使用 XQuery 而不是将信息存储两次(在 XML docs + mysql 数据库中)并查询 mysql 数据库以进行相关性搜索可能是一个好主意。

XQuery 对此有什么好处吗?在每个大约 7kb 的 +1000 个文档上,我可以期望什么速度?

感谢您的时间。

亲切的问候

4

2 回答 2

1

如果您有 +1000 个文档正在被搜索给定查询,那么使用 jQuery 或 SQL 数据库效率不高。

1)在每个文档中对每个关键字进行顺序搜索将带您不少于 # 文档 * 每个文档中的单词 # * 关键字 #

2) 每次您进行搜索时,都必须再次扫描每个文档。如果您有一个涉及多次搜索的项目,这是不可行的。

3) 顺序搜索不能让您根据找到的单词数和文档中的单词总数、重要性或每个单词等对结果进行排名...

更好的选择是使用倒排索引数据结构提前“索引”您的文档和单词。

这样,您将预先做一些工作来索引每个文档中的每个单词,但是在进行实际搜索时会节省大量时间(这很重要)。

另一个优点是您将能够以非临时方式对文档进行排名。请参阅向量空间模型

于 2010-04-15T12:59:54.550 回答
0

如果您想要 XML 文档的搜索解决方案(仅搜索而不是复杂的文档事务),那么我建议您使用 Apache - Lucene 搜索引擎。

最新的 Apache Lucene 3.x 版本提供了血统搜索功能。

最重要的是,您可以使用 Apache-Solr,它使用 lucene 作为搜索引擎,具有所有管理功能、分面浏览和有效负载。(注意:Lucene 实现也适用于所有 .NET、Java、Python、Ruby 语言)。

如果您想要一些真正基于 XQuery 且具有开源性质的解决方案 - 考虑到您的文档量,请尝试使用 eXist Xml 数据库。在 eXists 数据库中加载所有 Xml 文档,然后使用 XQuery。但是这种方法需要 -

  1. 将所有 Xml 文档提取到 eXists 数据库中
  2. 编写 XQuery 模块以将这些文档查询到 Xml 结果集中
  3. 直接从您的应用程序与那些 XQuery 模块对话以获得结果。
于 2010-04-17T23:28:20.270 回答