我在mysql表中有大约100thousand
行,其中each row has about 8 fields.
我终于掌握了如何使用Zend Lucene
对mysql表中的数据进行索引和搜索。
在我将这个功能完全应用到我的网站之前,我有一些问题:
1-有可能提前确定索引的大小吗?这是因为在Zend手册中说索引的最大大小是2 2GB。我马上就想,这对我的桌子来说是不够的!
2-我读过一些帖子,他们说Zend Lucene搜索在大索引上非常慢,长达几分钟!直接使用mysql命令(SELECT,LIKE等)比使用zend更快吗?
3-我的问题有没有其他的解决方案,那就是为分类广告创建一个搜索引擎,它至少具有these功能,并且不需要全文mysql索引(字段)。
谢谢
发布于 2009-12-22 08:22:29
SOLR基本上是一个Apache Tomcat容器,它实现了一个REST接口来查询Apache Lucene索引。是的,您需要能够在web服务器上运行Java应用程序。这是一个需要你和你的主机提供商解决的问题。
使用您的web应用程序的客户端不需要运行Java。您的PHP应用程序可以对SOLR服务执行REST查询,并将结果格式化为HTML。客户机只看到HTML输出;它不需要知道数据来自于用Java实现的服务。
Zend_Search_Lucene
是一个纯PHP实现,应该与Apache Lucene的工作方式相同。Zend解决方案甚至使用相同的索引文件格式。因此,它们在存储方面应该是相等的。
我使用Java Lucene来索引StackOverflow数据转储(2009年10月)。我索引了150万行,其中包括大约1G的文本数据。Lucene索引为1323MB,而相同数据的MySQL全文索引仅为466MB。
当然,使用SQL LIKE
谓词代替任何全文索引解决方案都不需要空间,因为它无论如何都不能利用传统的索引。但在我的测试中,使用LIKE
的速度大约是Java Lucene的200倍,而Java Lucene又比同样数据上的MySQL全文索引慢大约40%。
请参阅我最近关于MySQL全文索引解决方案的演示:
http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql
它无法与Java Lucene技术的性能和可伸缩性相匹敌也就不足为奇了。PHP作为一种语言的优势在于提高了开发效率,而不是运行时效率。
更新:我刚刚尝试使用Zend_Search_Lucene
创建索引。使用PHP创建索引比使用Java Lucene技术慢得多,所以我只索引了10,000个文档。这几乎花了15分钟,这使得它需要大约36小时来索引整个集合。这与Java Lucene相比,在我的测试中,它在不到7分钟的时间内索引了150万个文档。
我用Zend_Search_Lucene
创建的索引的大小是8.75MB。根据这个150倍的推算,我估计完整的索引应该是1312.5 MB。因此,我得出结论,Zend_Search_Lucene
创建的索引与Java Lucene生成的索引的大小大致相同。这和预期的一样。
https://stackoverflow.com/questions/1943300
复制相似问题