Как уменьшить минимальную длину слова в поиске ?

нужен поиск по сайту с минимальной длиной запроса в 3 буквы (для слов Бук, Дуб Вяз и т.д.)

#1 7 декабря 2013 в 20:58
Где настраивается поиск? Нужно уменьшить минимальную длину слова с 3х до 2х букв… Чтобы при поиске бук серебристый искало именно фразу бук серебристый, а не исключало слово бук из поиска.
#2 5 октября 2022 в 17:26

Всем привет!

Помоги пожалуйста с вопросом.
Сейчас, в версии 2.15.2 — минимальный поиск по 4 буквам или цифрам, как я понимаю, так как не ищет по 3 буквам или цифрам, а по 4-м — ищет.
Как уменьшить хотя бы до 3-х символов поиск?

#3 5 октября 2022 в 17:37

Есть файл system\controllers\search\model.php вроде как оно

  1. // Узнаём минимальное кол-во символов для поиска
  2. // ft_min_word_len для MyISAM, если у вас таблицы InnoDB, то замените на innodb_ft_min_token_size
  3. $var_value = $this->db->getSqlVariableValue('ft_min_word_len');
  4.  
  5. if($var_value < 3){
  6. $this->three_symbol_search = true;
  7. }
#4 5 октября 2022 в 17:57

DeeMon, а у вас какая версия?
У меня вроде как таких строк совсем там нет...
Но и стоят везде 3, четверок нет.
Но ищет именно по 4-м.

#5 5 октября 2022 в 18:01

DeeMon, а у вас какая версия?

skewes

это код с последней, более 3х символов

#6 5 октября 2022 в 18:26

Да, точно, в папке другого сайта смотрел...
Ну у меня тоже 3 стоит, но почему то не ищет.
Поставил 2, результат тот же....

Добавлено спустя 17 минут

В режиме отладки вот что пишет:

Fatal error: Uncaught Error: Call to a member function setQuery() on null in /home/c/cx70732/duxi/public_html/system/controllers/search/actions/index.php:36 Stack trace: #0 /home/c/cx70732/duxi/public_html/system/core/controller.php(665): actionSearchIndex->run() #1 /home/c/cx70732/duxi/public_html/system/core/controller.php(536): cmsController->runExternalAction('index', Array) #2 /home/c/cx70732/duxi/public_html/system/core/controller.php(512): cmsController->executeAction('index', Array) #3 /home/c/cx70732/duxi/public_html/system/core/core.php(763): cmsController->runAction('index', Array) #4 /home/c/cx70732/duxi/public_html/index.php(47): cmsCore->runController() #5 {main} thrown in /home/c/cx70732/duxi/public_html/system/controllers/search/actions/index.php on line 36

public_html/system/controllers/search/actions/index.php on line 36:

            if (!$query || !$this->model->setQuery($query)) {

Вот что в 36 строке прописано.

#7 5 октября 2022 в 18:48

зависит от версии mysql, где то об этом тут писали

#8 5 октября 2022 в 18:57

Александр, Mysql сервер: 5.6.39 — такая версия.
Версия PHP: 7.2.31, apache2handler

// Узнаём минимальное кол-во символов для поиска
// ft_min_word_len для MyISAM, если у вас таблицы InnoDB, то замените на innodb_ft_min_token_size
$var_value = $this->db->getSqlVariableValue('ft_min_word_len');
 
if($var_value < 3){
$this->three_symbol_search = true;
}

Попыткался изменить на innodb_ft_min_token_size, результата нет.

#9 5 октября 2022 в 19:33

Не надо трогать эту строку. Там выше есть

if (mb_strlen($query) === 3) {

в ней поменяйте

#10 5 октября 2022 в 20:28

 Lora, что поменять?

3 на 2 ?
Не ищет все равно по 3 цифрам и буквам.
Может еще какие-то варианты есть?

Это видимо я затупил… Исправил, перезалил файл и все хорошо.

Fatal error: Uncaught Error: Call to a member function setQuery() on null in /home/c/cx70732/duxi/public_html/system/controllers/search/actions/index.php:36 Stack trace: #0 /home/c/cx70732/duxi/public_html/system/core/controller.php(665): actionSearchIndex->run() #1 /home/c/cx70732/duxi/public_html/system/core/controller.php(536): cmsController->runExternalAction('index', Array) #2 /home/c/cx70732/duxi/public_html/system/core/controller.php(512): cmsController->executeAction('index', Array) #3 /home/c/cx70732/duxi/public_html/system/core/core.php(763): cmsController->runAction('index', Array) #4 /home/c/cx70732/duxi/public_html/index.php(47): cmsCore->runController() #5 {main} thrown in /home/c/cx70732/duxi/public_html/system/controllers/search/actions/index.php on line 36

#11 5 октября 2022 в 22:04

Не ищет все равно по 3 цифрам и буквам.

skewes

Искать то ищет. Не находит, это уже другой вопрос)

Значит поставьте в этой строке

if($var_value < 3){

вместо 3 пять, а там так двойку и оставьте

Проверил. Что то находит)

#12 5 октября 2022 в 22:06

 Lora, есть страница на сайте 2040 название.

в поиск вбиваю 204 — нет результата, вбивая 2040 — результат есть.

Добавлено спустя Только что

На старой версии инстанта 2.13.2 — ищет по 3 символам.

#13 5 октября 2022 в 22:10

Значит поставьте в этой строке

if($var_value < 3){

вместо 3 пять, а там так двойку и оставьте

Lora

Это сделали?

Работать то должно, но вроде это не совсем айс. Что то там с полнотекстовыми индексами вроде делать надо по феншую.

#14 5 октября 2022 в 22:23

Это сделали?

Работать то должно, но вроде это не совсем айс. Что то там с полнотекстовыми индексами вроде делать надо по феншую.

Да, сделал, не ищет что-то...

#15 5 октября 2022 в 22:27

По цифрам не знаю, а по двум буквам у меня что то выдал. Сейчас проверю ещё.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.