我想在java中使用nosql数据库和xml实现一个小型搜索引擎,并将其安装在网站上搜索该网站,我对此有一些疑问:
1.这真的是一个好主意吗?
2.最重要的问题:在哪里使用nosql数据库,我的意思是在这个项目中搜索引擎从用户那里取一个单词并搜索这个单词所在的位置并将这些短语重新归结给用户,那么数据库在这里的作用是什么?3. xml的作用是什么?
4.最好的搜索方法是什么?
5.我已阅读了2个链接first link和second one,使用lucene或solr,在这个项目中可以使用这两个,如何以及在哪里?
6.用于它的最佳nosql数据库是什么?
7.这是一个艰难的项目吗?
我真的非常感谢你的帮助。
答案 0 :(得分:1)
我会尽力给你我的意见,我很乐意在评论中提供建设性的反馈。
首先,你正在进行一个非常软的论证,你可能不喜欢我的观点,以下几点被标记为回答你的问题
1)是和否是,因为您可以对存储在html代码中的关键字进行智能搜索,但是您不知道需要探索多少页面。此外,您的内容可能会动态更改,关键字可能无用。最后一部分介绍了No部分。不,因为您需要一种方法来了解页面的内容,例如stackoverflow中的问题标记为标记。我想它们存放在某个地方。
2)你从用户那里获取一个世界,你应该在自己的网站上运行一个“网络蜘蛛”来了解这个世界的发生地点。打开你拥有的所有页面,搜索它,过滤它,最终如果你编写了足够好的代码,你可以在几秒内解析一个页面,这就像map-reduce算法一样好。 编辑:这一点很清楚。你不知道用户会提示什么样的字符串或输入(从现在开始称之为 X )。这说你把它存放在某处并开始搜索:
您编写的脚本会检查您网站中的所有网页。这是一个糟糕的主意。请继续考虑stackoverflow示例:你怎么知道你有多少页?你有一个固定页数(静态)?或者您的内容会发生变化(如文本和stackoverflow中的页数)?为此,您必须运行“算法”来打开所有页面并查找内容。 您可以查找特定类型的内容,因为您可以使用html页面的关键字标签来约束您的研究。如果 x 位于您为单个页面完成的关键字中,则必须循环搜索,直到您控制所有网页为止。在记忆中浪费时间和空间。假设有一个恒定的时间打开你的网页的套接字,并说你有n个页面,其中包含m个关键字,说 x 包含l个单词:这大约需要O(n * m * l)。 (不考虑可能你想分析整个页面的事实)
如果你有很多资源,你可以使用map-reduce模型编写这个“算法”(参见这里很好地解释map-reduce)。
相反,如果您使用标签系统之类的东西,只需将标签映射到页面,并将它们保存到一个简单的表格中(在简单的情况下为3列:ID TAG PAGE),您就可以快速搜索数据库,在标签列中查找 x ,似乎要快得多。
3)这个问题不响铃,相反:你会用xml做什么?你想放一些在哪里?你的网页是用xml的?你想保存xml搜索结果吗?
4)我认为谷歌已经提供了类似的东西。无论如何,一个好方法是打开每个页面,根据页面读取xml / html,然后运行正则表达式来匹配你的单词。
5)这两个链接是自我解释的,在答案中你真的找到了你需要的东西。
6)毫无头绪。
7)否。但你应该努力定义。这需要你花很长时间思考,并为它找到合适的设计,然后你将决定lucene是否适合你,如果你想使用sql,或者其他什么。