Как использовать sphinx в yii2 + postgresql?

Пользователь

от pauline , в категории: SQL , 6 месяцев назад

Как использовать sphinx в yii2 + postgresql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от dan_farrell , 6 месяцев назад

@pauline 

Для использования Sphinx в Yii2 с PostgreSQL необходимо выполнить следующие шаги:

  1. Установите и настройте Sphinx Search на своем сервере. Официальный веб-сайт Sphinx Search содержит подробную документацию по его установке и настройке.
  2. Установите расширение yiisoft/yii2-sphinx в вашем проекте Yii2, выполнив следующую команду через Composer:
1
composer require yiisoft/yii2-sphinx


  1. В файле конфигурации config/web.php или config/console.php в разделе components добавьте компонент для Sphinx:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
'components' => [
    ...
    'sphinx' => [
        'class' => 'yiisphinxConnection',
        'dsn' => 'mysql:host=127.0.0.1;port=9306;',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
    ...
],


Укажите соответствующий DSN, имя пользователя и пароль для подключения к серверу Sphinx.

  1. Создайте класс модели, представляющей таблицу в индексе Sphinx. Например, если у вас есть таблица news в вашей базе данных PostgreSQL, то модель может выглядеть следующим образом:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use yiisphinxActiveRecord;
use yiidbQuery;

class News extends ActiveRecord
{
    public static function indexName()
    {
        return 'news_index';
    }
    
    public function attributes()
    {
        return [
            'id',
            'title',
            'content',
        ];
    }
    
    public function getDb()
    {
        return Yii::$app->sphinx;
    }
    
    public function getRelatedNews()
    {
        // Здесь можно выполнить запрос к базе данных PostgreSQL для получения связанных новостей
    }
}


В методе indexName() укажите имя индекса Sphinx, созданного для таблицы news. В методе attributes() укажите атрибуты, которые будут использоваться для полнотекстового поиска. Кроме того, определите метод getDb() для возвращения компонента подключения к Sphinx.

  1. Выполните поиск с использованием Sphinx в контроллере или другом месте вашего приложения по своему усмотрению. Например, для поиска новостей можно использовать следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$query = News::find()
    ->match('низкое давление')
    ->orderBy(['id' => SORT_DESC])
    ->limit(10);
    
$results = $query->all();

foreach ($results as $result) {
    echo $result->title . '<br>';
    echo $result->content . '<br>';
    // ...
}


Обратите внимание, что здесь использованы функции match() и orderBy() специфичные для Sphinx yiisphinxQuery, а не yiidbQuery.


В этом примере выполняется поиск новостей, содержащих фразу "низкое давление", с сортировкой по убыванию и последующим ограничением до 10 результатов.


Это лишь базовый пример использования Sphinx в Yii2 с PostgreSQL. Вам также может понадобиться настроить соответствующие индексы на сервере Sphinx, задать дополнительные условия или фильтры поиска и т. д.