Как реализовать solr и солярий в cakePHP
Я должен интегрировать поиск Solr в один из моих проектов CakePHP. Я установил Solr и Solarium с помощью composer, но не смог найти, как начать поиск с помощью Solr. Есть ли пример кода в CakePHP?
3 ответа
Я интегрировал Solr с Вариантом 1. Однако вариант 2 выполним, но из-за некоторых временных ограничений я должен выбрать вариант 1. Мы можем напрямую включать поставщика Solarium и включать его класс в наш контроллер, когда это требуется, и использовать запросы добавления / получения solr.
Есть в основном 3 основных шага: 1: Установить Solr. 2. Установите Solarium с помощью composer. 3. Используйте сценарии в файлах контроллера или компонентов для получения результатов.
Вы можете получить полную справочную и примерную кодовую базу здесь:
http://findnerd.com/list/view/Solr-integration-in-CakePHP-with-solarium-client/1946/
Благодарю.
Первое, что вам нужно выяснить, - это как представить API-интерфейс Solarium в вашем приложении CakePHP. Как правило, это означает сохранение некоторых сторонних файлов PHP в Vendor
каталог вашего приложения (загляните сюда для получения дополнительной информации).
После этого у вас есть два варианта:
- Взаимодействуйте с API-интерфейсом Solarium непосредственно в действиях вашего контроллера.
- Реализуйте источник данных Solarium, чтобы вы могли использовать модельные конструкции CakePHP.
Опция 1
Эта опция менее согласуется с тем, как разработчики CakePHP хотели бы, чтобы вы делали MVC, и вам придется генерировать значительный кусок кода каждый раз, когда вы хотите поместить что-то в Solr или сделать запрос (например, подключиться к базе данных Solr). Если у вас есть минимальное взаимодействие с вашей базой данных Solr, то я бы рекомендовал пойти по этому пути. Возможно, вы могли бы заключить свой доступ в отдельный вспомогательный класс или функцию, чтобы вместо этого:
public function void myControllerAction() {
// create a client instance
$client = new Solarium\Client($config);
// get a select query instance
$query = $client->createQuery($client::QUERY_SELECT);
// this executes the query and returns the result
$resultset = $client->execute($query);
// expose the result set to your view
$this->set('records', $resultset);
}
Вы могли бы иметь это:
public function void myControllerAction() {
$resultset = solarium_get_records();
// expose the result set to your view
$this->set('records', $resultset);
}
Вариант 2
Эта опция немного сложнее и требует от вас написания источника данных Solarium, как разработчики написали для MySql и Postgres. Это требует от вас полного понимания внутренней работы механизма модели CakePHP, но, взглянув на то, как работают другие источники данных, это не должно быть ракетостроением. Будьте уверены, что если вы сделаете это и сделаете свой код открытым исходным кодом, другие разработчики будут любить использовать его в своих собственных приложениях CakePHP!
Преимущество этого подхода заключается в том, что вы успешно абстрагируете свое приложение от конкретной реализации базы данных. Поэтому, если вы решили, что не хотите использовать Solr, и предпочитаете другую поисковую систему, вы можете перенести свои данные, написать новый источник данных (если он еще не существует), и все готово.
Это, вероятно, не совсем отвечает на ваш вопрос, но вместо этого направляет вас в правильном направлении и выделяет некоторые аспекты, которые вы должны рассмотреть.
Я интегрировал Solr, используя Сэм Вариант 2 (в качестве источника данных)
https://github.com/Highstrike/cakephp-solr-datasource
Вы также можете найти там инструкции о том, как использовать его с примерами