Компонент Поиск

 
Посетитель
small user social cms
Медаль
Сообщений: 180
Здравствуйте!

Имеется движок ICMS версии 2.5.1.

Заведен контент, необходимые типы контента добавлены в настройках Компонента Поиск.

Имеется страница с описанием подготовки к ЕГЭ по английскому языку. По слову "ЕГЭ" поиск выдает: "Ничего не найдено", хотя страница кишит этим словом в тексте, а также имеется в заголовке страницы. Другие слова с этой же страницы, длина которых начинается от 4 символов и более - ищутся и эта же самая страница (которую по запросу "ЕГЭ" сайт не может найти) преспокойно отображается в результатах поиска.

Как заставить компонент Поиск в InstantCMS 2.5.1 производить поиск страниц по трехсимвольным запросам?
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2239
Alexey Zagrebelniy:
Как заставить компонент Поиск в InstantCMS 2.5.1 производить поиск страниц по трехсимвольным запросам?
точно вопрос поднимался. Надо поменять настройки в базе данных какие-то. Поищите по сайту расширенным поиском яндекса фразу "Полнотекстовый индекс Fuze".
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
Медаль
Сообщений: 180
Zau4man:

Alexey Zagrebelniy:
Как заставить компонент Поиск в InstantCMS 2.5.1 производить поиск страниц по трехсимвольным запросам?
точно вопрос поднимался. Надо поменять настройки в базе данных какие-то. Поищите по сайту расширенным поиском яндекса фразу "Полнотекстовый индекс Fuze".

Это не то. Данные поля типа "Текст HTML" у меня уже включены опции "Участвовать в полнотекстовом поиске", типы контента добавлены в настройках компонента Поиск для поиска, но .....
- для поиска по 1-2 символам - выдается ошибка "Слишком короткие слова в запросе";
- для поиска по запросу длиной в 3 символа - ничего не находится нигде;
- для поиска по запросу длиной 4 и более символов - производится поиск, причем те страницы выдает, где и искомое слово ЕГЭ.
Для примера: на странице с искомым словом "ЕГЭ" присутствует слово "IELTS" (это такой экзамен). Если я задаю в поиске запрос "IELTS" - он мне находит эту страницу без проблем, т.е. по 5 символам ищет. Если я задаю запрос "IELT" (т.е. 4 символа) - сайт тоже находит эту же страницу. Если я сокращу запрос до 3 символов и запрошу "IEL" - пишет "Ничего не найдено". Ну, а если я попытаюсь искать по "IE" - выдает ошибку "Слишком короткие слова в запросе".
Проблема в том, что на сайте много наименований содержащих 3 символа в названии и сайт их не находит.

В компоненте контроллера поиска в файле /system/controllers/search/model.php есть проверка длины слов:
Код PHP:
  1.  
  2. public function setQuery($query){
  3.  
  4. $this->original_query = $query;
  5.  
  6. $this->query = array();
  7.  
  8. $stopwords = string_get_stopwords(cmsConfig::get('language'));
  9.  
  10. $words = explode(' ', $query);
  11.  
  12. foreach($words as $word){
  13.  
  14.  
  15. if (mb_strlen($word)<3 || is_numeric($word)) { continue; }
  16. if($stopwords && in_array($word, $stopwords)){ continue; }
  17. if (mb_strlen($word)==3) { $this->query[] = $this->db->escape($word); continue; }
  18.  
  19. if (mb_strlen($word) >= 12) {
  20. $word = mb_substr($word, 0, mb_strlen($word) - 4);
  21. } else if (mb_strlen($word) >= 10) {
  22. $word = mb_substr($word, 0, mb_strlen($word) - 3);
  23. } else if (mb_strlen($word) >= 6) {
  24. $word = mb_substr($word, 0, mb_strlen($word) - 2);
  25. } else {
  26. $word = mb_substr($word, 0, mb_strlen($word) - 1);
  27. }
  28.  
  29. $this->query[] = $this->db->escape($word) . '*';
  30.  
  31. }
  32.  
  33. if (empty($this->query)) { return false; }
  34.  
  35. return true;
  36.  
  37. }
  38.  
Но мне не понятно, что у длине равной 3 происходит там. Может быть где загвоздка в последующих обработчиках, но факт остается фактом: система не ищет запросы длиной ровно в 3 символа не зависимо от того, что и тип контента добавлен в поиск и для искомого поля включено "Участвовать в полнотекстовом поиске".

Так кто подскажет решение?
Редактировалось: 2 раз (Последний: 18 июля 2016 в 20:05)
Посетитель
small user social cms
Медаль
Сообщений: 347
Это не
система не ищет запросы длиной ровно в 3 символа
Это такое минимальное значение полнотекстового поиска MySQL по умолчанию - четыре символа.
Вам нужен доступ к изменению системной переменной MySQL ft_min_word_len,
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1968
Геннадий Иванович:
Вам нужен доступ к изменению системной переменной MySQL ft_min_word_len,

А если просто пририсовывать принудительно пробел к трёхбуквенному значению поиска?

Код PHP:
  1. else if (mb_strlen($word) == 3) {
  2. $word = $word. ' ';}
Так прокатит?
-------------------------------------------------------

Увы, не прокатывает.

Впрочем попытка изменения ft_min_word_len тоже не слишком удачна...

Спойлер
Изменение переменной прямо в OpenServer\userdata\config\MySQL-5.5_my.ini тоже не решает вопрос.
--------------------------------------------------------------

Народ рекомендует преобразовывать все трехбуквенные слова в базу с дублированием, а при выводе - преобразовывать обратно:

http://xodos.ru/polnotekstoviy-poisk-mysql-po-3-simvolam/
Редактировалось: 3 раз (Последний: 18 июля 2016 в 22:04)
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4088
Достаточно сделать, чтобы если поисковая фраза имеет ровно три символа, SQL запрос выполнять через LIKE '%{$query}%'. Сделаю коммит на досуге.
Редактировалось: 1 раз (Последний: 18 июля 2016 в 23:29)
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Медаль
Сообщений: 180
Fuze:

Достаточно сделать, чтобы если поисковая фраза имеет ровно три символа, SQL запрос выполнять через LIKE '%{$query}%'. Сделаю коммит на досуге.

Спасибо, Fuze!

А я пока ради интереса отправил хостеру запрос может ли он изменить настройку серверной переменной для MySQL или нет.
Посетитель
small user social cms
Медаль
Сообщений: 180
Ну как и предполагалось: хостер отказал изменить настройку серверной переменной. :(
Посетитель
no avatar
Сообщений: 53
Fuze:

Достаточно сделать, чтобы если поисковая фраза имеет ровно три символа, SQL запрос выполнять через LIKE '%{$query}%'. Сделаю коммит на досуге.

Здравствуйте! Удалась это как-то сделать, а то в 2.7.1 по трем буквам все равно не ищется.?
Строю этот сайт www.prikolmix.ru и этот www.torg64.ru
Посетитель
no avatar
Сообщений: 17
Здравствуйте! Для меня это тоже актуальный вопрос
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форума
Сообщений: 1479
@parunov:
Здравствуйте! Удалась это как-то сделать, а то в 2.7.1 по трем буквам все равно не ищется.?
Поиск в Инстанте всегда был нечто из ряда.... в общем очень сложно им пользоваться и выдача не корректная. Аякс бы поиск к нему...
Недорогой и мощный хостинг для InstantCMS
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1162
vikont:
Аякс бы поиск к нему...
Вы считаете если прикрутить аякс все изменится? =)
Посетитель
no avatar
Сообщений: 5
Люди! У меня проблемка такая. Не отображаются результаты поиска?! Похоже после обновления 2.7.1. Выводит меню, что найдено: Статьи-2, Новости-6 и т.п. А самого тела с результатами - нет?!!!
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форума
Сообщений: 1479
Val:
Вы считаете если прикрутить аякс все изменится? =)
Как то пробовал Поиск от Дениса Васильевича. У него аякс и как то работает иначе. Главное, что очень быстрая выдача сразу во время набора. то позволяет быстро определиться с корректностью ввода и даже не делать ввод полностью, если получен нужный результат.

Что имеем сейчас!? Надо ввести выражение поиска, нажать на Ввод и потом долго рыться в результатах, которые выдаются без какой либо фильтрации. Не редки случаи, когда вообще ничего не находится, хотя точно известно, что такое слово есть. Не поиск, а сплошная проблема.
Недорогой и мощный хостинг для InstantCMS
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1162
vikont, я говорил о том, что добавление технологии AJAX никаким образом не повлияет на качество поиска.
Wikipedia
Это совершенно из разных областей))
Да, с помощью аякс вам, как конечному пользователю, можно показать выпадающий список с какими либо строками, но формирование содержимого этого списка от аякс никак не зависит, от слова совсем. Более того, уверен что Денис Васильевич чего-то экстра неординарного в своем поиске не делал - я о том что выборка по БД происходит одинаково в обоих случаях. Хотя, признаюсь, я не видел дополнения о котором вы говорите, но предполагаю что поисковых движков оно не использует и систем ранжирования не применяет.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.