Сведения о вопросе

Sadijon

23:41, 5th August, 2020

Теги

search   orm   doctrine   propel    

Стратегии поиска платформы

Просмотров: 395   Ответов: 2

Я ищу информацию по обработке поиска в разных ORMs.

В настоящее время я перестраиваю какое-то старое приложение в PHP, и одно из требований: сделайте все или почти все доступным для поиска, поэтому пользователь просто набирает "punkrock live", и приложение находит видеоклипы, музыкальные треки, обзоры, предстоящие события или даже комментарии пользователей, помеченные таким образом.

В среде, где все доступно для поиска ORM необходимо поддерживать эту функцию двумя способами:

  • предоставление некоторой индексации API на "O" стороне ORM
  • предоставление средств для массового извлечения базы данных на стороне "R"

Идеальное решение будет возвращать готовые объекты на основе искомой строки. Знаете ли вы какие-либо хорошие решения end-to-end, которые выполняют эту работу, не обязательно в PHP? Если вы имели дело с подобной проблемой, было бы неплохо послушать, что ваш опыт. Нечто большее, чем использование Lucene или семантической паутины является способ oneliner'ы, Тхо ;-)*



  Сведения об ответе

+-*/

12:39, 13th August, 2020

Недавно я интегрировал поисковую систему Compass в приложение Java EE 5. Он основан на Lucene Java и поддерживает различные фреймворки ORM, а также другие типы моделей, такие как XML или вообще без реальной модели ;)

В случае объектной модели, управляемой платформой ORM, вы можете аннотировать свои классы специальными аннотациями (например, @Searchable), регистрирует ваши классы и позволяет Compass индексировать их при запуске приложения и автоматически прослушивать изменения в модели.

Когда дело доходит до поиска, у вас есть сила Lucene под рукой. Затем Compass предоставляет вам экземпляры объектов модели в качестве результата поиска.

Это не PHP, но вы сказали, что это не обязательно должно быть PHP;) не знаю, помогает ли это, хотя...


  Сведения об ответе

#hash

21:06, 1st October, 2020

В файле Propel 1.3 schema.xml можно указать, что вы хотите, чтобы все ваши модели расширяли класс "BaseModel", который создает YOU.

В этом BaseModel, вы собираетесь переопределить метод save(), чтобы быть чем-то вроде этого:

public function save(PropelPDO $con = null)
{
    if($this->getIsSearchable())
    {
             // update your search index here. Lucene, Sphinx, or otherwise
    }

    return parent::save($conn);
}

Это заботится о том, чтобы все было проиндексировано. Что касается поиска, я бы предложил создать класс поиска с несколькими методами.

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;
   }
}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться