@ar2rsoft
PHP-developer

Как сформировать запрос Sphinx в Yii2 (компонент yiisoft/yii2-sphinx)?

Приветствую!

Есть проект, написанный на PHP без фреймворков, MVC и так далее. При переписывании на Yii2, возник вопрос с поиском через Sphinx. Вопрос в том, как задать параметры поиска, такие как setMatchMode и setSortMode, и как прикрепить buildExcerpts?

Простейший запрос получается сделать из документации
$rows = (new Query)
            ->from('my_index')
            ->all();


В документации, про сниппеты, примеры вида:
$rowSnippetSources[] = file_get_contents('/path/to/index/files/' . $row['id'] . '.txt');

Но у меня нет этих файлов с ID в названии, только файлы с названием проекта и разными расширениями.

Доку конечно же читал, ответ не нашел
https://github.com/yiisoft/yii2-sphinx/blob/master...

Вот код, который хочется написать на Yii2:
$s = new SphinxClient();
    $s->setServer("127.0.0.1", 9312);
    $s->setMatchMode(SPH_MATCH_EXTENDED2);
    $s->setSortMode(SPH_SORT_RELEVANCE);
    $s->SetFieldWeights([
        'name' => 10,
        'desc' => 1,
        'video_text' => 1,
    ]);
    $s->setMaxQueryTime(3000);
    $result = $s->query($name, '*');
    
    $items = [];
    foreach ($result['matches'] as $id => $item) {
        $items[$id] = [
            'name' => $item['attrs']['name'],
            'weight' => $item['weight'],
            'direct' => $item['attrs']['name'] == $name
        ];
        $desc = $s->buildExcerpts([$item['attrs']['desc']], 'my_index', $name, [
            'before_match' => '<strong>',
            'after_match' => '</strong>',
            'around' => 2,
            'limit' => 2,
        ]);
        $items[$id]['desc'] = $desc[0] ?? false;
    }
    usort($items, function ($a, $b) {
        if ($a['direct']) {
            return -1;
        } else {
            return $a['weight'] < $b['weight'];
        }
    });


Собственно воспрос, как данный код написать на Yii2, используя указанный компонент или может подскажете другой компонент, на котором можно это реализовать?
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
Используйте прямые SQL запросы к сфинксу и все будет ок
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы