Приветствую!
Есть проект, написанный на 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, используя указанный компонент или может подскажете другой компонент, на котором можно это реализовать?