Что я должен сделать, создать поисковик самостоятельно или использовать другой? - PullRequest
2 голосов
/ 19 декабря 2009

У меня есть этот сайт объявлений, и я сейчас ищу способы реализовать функцию поиска объявлений.

Интересно, есть ли какое-нибудь руководство по созданию довольно мощного поискового движка в PHP, о котором вы знаете?

Я заглянул в сторонние поисковые системы, и кажется, что их слишком много ...

PS: на моем сервере нет полнотекстовой поддержки.

Спасибо

Ответы [ 6 ]

6 голосов
/ 19 декабря 2009

Если честно, я бы порекомендовал использовать Zend_Lucene , поскольку, хотя на первый взгляд это выглядит запутанно, его очень просто использовать, как только вы справитесь с ним. Хотя индексация медленная, поиск очень быстрый.

Если вы хотите написать быструю и мощную поисковую систему, вы не найдете реализацию в учебнике, вам лучше будет провести небольшое исследование и почитать статьи на эту тему. Другими словами, вы не сможете написать что-нибудь на PHP, чтобы конкурировать с Zend Lucene без большого количества исследований и тяжелой работы.

Документы очень хорошие, и мне удалось внедрить Zend Lucene в проект, не основанный на Zend Framework. Это просто требует полчаса, потраченного на чтение и усвоение документов, и еще полчаса на написание быстрого набора тестов для проверки правильности ваших предположений.

Чтобы создать документ с идентификатором автомобиля и сделать:

//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 как для базы данных, так и для индекса.

2 голосов
/ 19 декабря 2009

Учитывая, что вы уже изучили Sphinx и Lucene и чувствуете, что они слишком сложные / большие для реализации, почему бы не взаимодействовать с одной из существующих поисковых систем . Вы также можете быть заинтересованы в этой статье, объясняющей, почему написание поисковой системы сложно

2 голосов
/ 19 декабря 2009

Типичное мышление с открытым исходным кодом - это повторное использование чего-либо там.

  • экономит время
  • вы, вероятно, узнаете о новых технологиях, о которых кто-то может знать больше
  • возвращать за свой счет, исправления ошибок, улучшения

Конечно, это относится только к проекту, который соответствует вашим потребностям. Если вы думаете, что для вашего сайта слишком много материала, пишите свой, вы тоже узнаете что-то новое ...

1 голос
/ 19 декабря 2009

Вы должны взглянуть на Lucene, Zend сделал неплохую библиотеку;

Zend_Search_Lucene

0 голосов
/ 19 декабря 2009

Если производительность важнее, чем память / память, я бы порекомендовал Xapian . Его производительность впечатляет в случае гигантских больших баз данных (с точки зрения ГБ). Под каждым сайтом социальных закладок tasty.com и крупнейшим голландским форумом, связанным с ПК Сбор твикеров , он используется, и я был близок к выбору, разработке и интеграции поисковой системы. , Он значительно превзошел другие поисковые системы.

0 голосов
/ 19 декабря 2009

Camran

Я использую очень мощный сторонний поисковик. Это немного дорого, но очень мощный.

посмотрите здесь:

DTSearch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...