现在开始一个网络/移动应用项目,其中搜索将是一个重要的变量。从一开始就使用Lucene或者快速部署基于MySQL的解决方案并希望最好的解决方案是否更好?
答案 0 :(得分:23)
我在2010年11月做了同样的决定。我是mysql的朋友,并试图首先在mysql上构建一个搜索应用程序 - 效果很好...... ......而且速度很快(我认为很快):搜索200.000份文件(不超过2-3秒)
我避免花时间去lucene / solr,因为我想利用这段时间来开发应用程序。并且:lucene对我来说是新的......我不知道,如果它足够好,我不知道它是什么...... 最后:你无法改变一生的习惯。
然而,我遇到了模糊搜索(在mysql中难以实现)或“更像这样”的不同问题(必须使用mysql或简单使用“更像这样”的应用程序中的痕迹进行编码) solr-feature开箱即用)。 最后,文档数量增加到一百万,mysql现在需要超过15秒来搜索文档。
所以我决定从lucene开始,感觉就像我打开了通向新世界的大门。 很多功能(我很难编写应用程序功能)现在由solr提供并开箱即用。全文搜索速度要快得多:在100万个文档中小于50毫秒,如果缓存则小于1毫秒。
因此投入的时间得到了回报。
因此,如果您考虑进行全文搜索:请使用lucene,如果您有一些数据而不是一些数据。 顺便说一下:我正在使用混合构造:将数据保存在mysql中,而lucene只是一个(几乎)没有存储数据的索引(以保持该索引小而快)。
答案 1 :(得分:5)
一般来说,如果你要进行全文搜索,你肯定需要lucene或sphinx + mysql(或lucene + mysql,在lucene中存储可索引字段,并为mysql行返回一个id)。他们中的任何一个都是很好的选择。
如果要进行“正常”搜索(即:整数或字符列或日期),mysql partitoning就足够了。
您需要指定要搜索的内容。你多久会重新编译你的数据库(如果你要重新编制索引,我会选择sphinx)
答案 2 :(得分:2)
您在询问是否使用Lucene或MySQL。但是Lucene是一个库,MySQL是一个服务器。你应该真的在SOLR搜索引擎和MySQL之间做出决定。在这种情况下,正确的答案可能是两者兼而有之。管理MySQL中的所有数据。运行流程以定期提取已更改的数据,将其转换为SOLR搜索格式,并将其加载到搜索引擎中。使用SOLR比直接使用Lucene要简单得多,如果你需要以某种方式修改行为,你仍然可以为SOLR编写插件,这样就不会失去灵活性。
但尝试使用SOLR管理数据将成为死亡之吻。读取 - 编辑 - 更新的循环在SQL dbs中运行良好,但它不是SOLR的全部内容。 SOLR是快速灵活的文本搜索。您可以在SOLR中粘贴图像URL,以便使用非索引字段准备搜索结果。