[РЕШЕНО] Криво работает поиск (не находи часть страниц)

Главные вкладки

Аватар пользователя gerboss gerboss 5 октября 2015 в 18:08

Просмотр форума на предмет "Не работает поиск" показал. что многие сталкивались с тем, что внутренний поиск drupal не работает или работает криво.
Но решений, кроме как использовать другой (сторонний) поиск, никто так и не предложил.
Может все-таки найдется кто знающий на сайте, что разобраться в проблеме.
Ситуация следующая.
Поиск на сайте находит не все ноды.
Часть нод ищутся без проблем, остальные поиск не "через раз".
Что делал:
- переиндексирование сайта - несколько раз, не помогло
- отключение и удаление модуля Search, с последующим включением и переиндексированием сайта - не помогло.
Полез в базы данных.
Модуль Search создает и работает с 4-мя таблицами.
search_dataset - содержит все ноды с их индексируемым содержимым (в таблице есть все ноды)
search_index - содержит все слова и номера нод, в которых эти слова встречаются (в таблице есть все слова и ноды, даже те, по которым на сайте поиск выдает нулевой результат. т.е., например, делаю поиск по "JK17" - на сайте соответствий не находится, ищу "JK17" прямо в таблице search_index - такая запись есть с верным номером ноды)
search_node_links - пустая таблица
search_total - в этой таблице хранится "вес" каждого слова (если я правильно понял). И вот тут "самое интересное"! По идее, в этой таблице должны быть все слова, которые есть и в таблице search_index. В реальности оказалось, что большинства слов (как раз из тех нод, что "плохо ищутся") в этой таблице нет! Как будто после какого-то слова (ноды) в эту таблицу перестали заноситься данные. Для эксперимента занес в эту таблицу запись "JK17" с весом 0.3 (взятым с потолка) - тут же поиск на сайте стал находить эту ноду

Может кто сталкивался и решал данную проблему - из-за чего в таблицу search_total может перестать заноситься данные?

Буду благодарен любым идеям и отдельное спасибо тем, кто дочитает до конца Smile

Комментарии

Аватар пользователя gerboss gerboss 6 октября 2015 в 10:58

полевые тесты показали, что в таблицу search_total заносятся слова из первой тысячи нод. точнее первые 999 нод.
слова из 1000 ноды и выше в таблицу уже не попадают
при этом в таблицах search_dataset и search_index такого глюка нет - на сайте более 3000 нод, в этих таблицах данные из всех нод, а вот в search_total только 999

это такой глюк Drupal7? (7.39)

есть большой сайт на Drupal6, там такого глюка не наблюдалось, поиск работает вполне прилично

Аватар пользователя gerboss gerboss 7 октября 2015 в 16:00

бывают в жизни "красивые" совпадения...

оказалось, глюк поиска никак с цифрой 999 не завязан.
просто на сайте было 999 "полупустых" коротких нод, а с тысячной ноды были заведены большие тексты.
в результате по крону первые 999 поиском обработались нормально (стояла обработка по 100 нод за запуск крона), а начиная с тысячной ноды крон начинал сбоить - при запуске через некоторое время выдавал страницу ошибки 500, при повторном запуске ругался, что уже запущен и прочее.

разбор модуля search показал, что таблицы search_dataset и search_index заполняются в одной "точке кода", а таблица search_total - в другой. т.е. текст разбивается на слова в массив, который заносится в таблицу search_index, потом идет кусок "стороннего" кода, а потом возвращаются к массиву слов и заполняют search_total

при зависании крона первый кусок кода успевал выполняться, а вот второй - нет.
в результате друпал считал, что ноды уже проиндексированы поиском, поскольку есть в таблице search_index, но результат поиска не мог выдать, поскольку их нет в search_total.

почему нельзя было заполнять все три таблицы в одном месте кода - мне не понятно.

в итоге - очистил таблицы поиска, уменьшил количество индексируемых нод за запуск крона - все нормально занеслось.