Я ищу информацию по обработке поиска в разных ORM.
В настоящее время я переделываю какое-то старое приложение на PHP, и одно из требований: сделать все или почти все доступным для поиска, чтобы пользователь просто набирал «punkrock live», и приложение находило видеоклипы, музыкальные треки, обзоры, предстоящие события или даже комментарии пользователей, помеченные таким образом. путь.
В среде, где все доступно для поиска, ORM необходимо поддерживать эту функцию двумя способами:
Идеальное решение - вернуть готовые объекты на основе искомой строки. Знаете ли вы какие-нибудь хорошие комплексные решения, которые выполняют свою работу, не обязательно на PHP? Если вы столкнулись с подобной проблемой, было бы неплохо послушать, каков ваш опыт. Что-то большее, чем одинарные вставки Используйте Lucene или семантическая сеть - это способ; -) *





Недавно я интегрировал поисковую систему Компас в приложение Java EE 5. Он основан на Lucene Java и поддерживает различные фреймворки ORM, а также другие типы моделей, такие как XML, или вообще не поддерживает настоящую модель;)
В случае объектной модели, управляемой фреймворком ORM, вы можете аннотировать свои классы специальными аннотациями (например, @Searchable), зарегистрировать свои классы и позволить Compass индексировать их при запуске приложения и автоматически прослушивать изменения в модели.
Когда дело доходит до поиска, у вас под рукой мощь Lucene. Затем Compass предоставляет вам экземпляры объектов вашей модели в качестве результата поиска.
Это не PHP, но вы сказали, что это не обязательно должен быть PHP;) Хотя не знаю, помогает ли это ...
В файле schema.xml Propel 1.3 вы можете указать, что вы хотите, чтобы все ваши модели расширяли класс «BaseModel», созданный ВАМИ.
В этой базовой модели вы собираетесь переопределить метод save (), чтобы он выглядел примерно так:
public function save(PropelPDO $con = null)
{
if ($this->getIsSearchable())
{
// update your search index here. Lucene, Sphinx, or otherwise
}
return parent::save($conn);
}
Это позаботится о том, чтобы все было проиндексировано. Что касается поиска, я бы предложил создать класс Search с несколькими методами.
class Search
{
protected $_searchableTypes = array('music','video','blog');
public method findAll($search_term)
{
$results = array();
foreach($this->_searchableTypes as $type)
{
$results[] = $this->findType($type, $search_term);
}
return $results;
}
}