我该怎么做,自己创建一个搜索引擎或使用另一个?

时间:2009-12-19 14:26:12

标签: php sql mysql html

我有这个分类网站,我现在一直在寻找实现分类广告搜索功能的方法。

我想知道,是否有任何教程可以用PHP创建一个非常强大的搜索引擎?

我已经调查了第三方搜索引擎,感觉它们太多了......

PS:我的服务器上没有全文支持。

由于

6 个答案:

答案 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已经建立了一个很好的图书馆;

Zend_Search_Lucene

答案 4 :(得分:0)

Camran

我使用非常强大的第三方搜索引擎。它有点贵但很强大。

看看这里:

dtSearch

答案 5 :(得分:0)

如果性能比内存/存储更重要,那么我建议Xapian。在庞大的大型数据库(就GB而言)的情况下,它的性能令人印象深刻。在每个社交书签网站delicious.com和荷兰最大的PC相关论坛Gathering of Tweakers下使用它,我一直在接近搜索引擎的选择,开发和集成。它的表现远远超过其他搜索引擎。