-1

我想在java中实现一个小型搜索引擎,带有nosql数据库和xml,并将其安装在一个站点上以搜索该站点,我对此有一些疑问:

1.这真的是个好主意吗?

2.最重要的问题:nosql数据库在哪里使用,我的意思是在这个项目中搜索引擎从用户那里获取一个单词并搜索这个单词在哪里使用并将这些短语返回给用户,那么数据库在这里的作用是什么?

3.xml的作用是什么?

4.什么是最好的搜索方法?

5.我已经在这两个链接中阅读了第一个链接第二个链接,使用 lucene 或 solr,在这个项目中这两个可以使用,如何以及在哪里使用?

6.什么是最好的nosql数据库?

7.这是一个艰巨的项目吗?

我将非常感谢您的帮助。

4

1 回答 1

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,或者其他什么。

于 2013-09-15T15:19:35.880 回答