我有这个分类网站,我现在一直在寻找实现分类广告搜索功能的方法。
我想知道,是否有任何教程可以用PHP创建一个非常强大的搜索引擎?
我已经调查了第三方搜索引擎,感觉它们太多了......
PS:我的服务器上没有全文支持。
由于
答案 0 :(得分:6)
老实说,我建议使用Zend_Lucene,因为虽然它起初看起来很混乱,但是一旦掌握它就很简单。虽然索引很慢,但搜索速度非常快。
如果你想编写一个快速而强大的搜索引擎,你不会在教程中找到一个实现,你最好做一些研究和阅读有关该主题的论文。换句话说,如果没有大量的研究和努力,你将无法用PHP编写任何可以与Zend Lucene竞争的东西。
文档非常好,我已经设法在一个基于无架构框架的项目中实现Zend Lucene。只需花费半小时阅读和消化文档,另外半小时编写一组快速测试来检查您的假设是否正确。
要创建包含车辆ID的文档,请执行以下操作:
//if it hasn't been created, you need to use ::create rather than ::open
$index = Zend_Search_Lucene::open('/data/my-index');
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text('Car', 'MyCar'));
$doc->addField(Zend_Search_Lucene_Field::Text('Make', 'BMW'));
$index->addDocument($doc);
找到车:
$index = Zend_Search_Lucene::open('/data/my-index');
$result = $index->find('Car:MyCar');
foreach ( $result as $hit ){
echo $hit->Make;
}
缺点是Zend_Lucene不是存储引擎,它不对存储做任何保证,因此虽然您可以使用它来存储记录,但使用适当的数据库将是更好的选择。这是我遇到的问题之一,您只需要保持搜索索引和数据库同步。我找到的最好的方法就是创建一个在数据库和索引上调用add / remove的包装类。
答案 1 :(得分:2)
典型的开源思维方式是重用任何东西。
当然这仅适用于满足您需求的项目。如果您认为,可用的东西对您的网站来说太多了,那就去写自己的东西吧,你也会学到新东西......
答案 2 :(得分:2)
鉴于你已经研究过Sphinx和Lucene,觉得它们太复杂/太大而无法实现,为什么不interface with one of the existing Search Engines。您可能也对本文解释为什么writing a search engine is hard
感兴趣答案 3 :(得分:1)
你应该看看Lucene,Zend已经建立了一个很好的图书馆;
答案 4 :(得分:0)
答案 5 :(得分:0)
如果性能比内存/存储更重要,那么我建议Xapian。在庞大的大型数据库(就GB而言)的情况下,它的性能令人印象深刻。在每个社交书签网站delicious.com和荷兰最大的PC相关论坛Gathering of Tweakers下使用它,我一直在接近搜索引擎的选择,开发和集成。它的表现远远超过其他搜索引擎。