Может быть кто-то делал на icms?
Попробовал по-быстрому на коленке, но что-то не совсем то выходит…
В общем, установил на icms библиотеку TNTSearch: github.com/teamtnt/tntsearch
Индексирую демо-данные — Новости, входящий в комплект поставки icms. Вот эти.
use TeamTNT\TNTSearch\TNTSearch; $tnt = new TNTSearch; $tnt->loadConfig([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'test_db', 'username' => 'test_usr', 'password' => 'test_pass', 'storage' => '/var/www/my_user/data/www/tnt', 'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class,//optional 'charset' => 'utf8', ]); $indexer = $tnt->createIndex('news.index'); // создаю индекс новостей в sqlite $indexer->query('SELECT id, title, content FROM cms_con_news;'); // выбираю заголовки и содержание новостей для индекса $indexer->setLanguage('russian'); $indexer->run();
Индекс создался. В storage появился файл news.index.
ОК!
Делаю запрос с намеренной ошибкой в слове «Россия»:
$tnt->selectIndex("news.index"); $tnt->fuzziness = true; $res = $tnt->search("росия");
Вернет новость с id 7… Вообще-то я ждал, как минимум 3 новости:
Россияне стали первыми на Чемпионате Мира Количество преступлений в России сокращается Все больше россиян покупают дома за границей
Или $tnt->search(«россиян»); — вроде две новости должно вернуться. Но вернется одна:
Все больше россиян покупают дома за границей.
ЗАТО! $tnt->search(«компани»); Без окончания и с «о» вместо «а» в первом слоге.Две новости (по содержанию)! Работает как надо.
ID4: … изложенной выше, консолидирует стиль менеджмента, используя опыт предыдущих кампаний. VIP-мероприятие...
ID5:… бюджеты. Продукт, анализируя результаты рекламной кампании, концентрирует культурный...
Что за дичь… И почему так? Почему на одном слове работает нормально, а на другом слове нет?? Я пробовал менять расстояние Левенштейна и др. параметры, но особого успеха это не приносит.
Может кто какие другие библиотеки пробовал?