Я использую поисковый API с базой данных на сайте Drupal 9.3.3.
Я проиндексировал 26 000 узлов пользовательского типа контента, включая пользовательское поле даты: field_display_date
Индекс настроен на визуализацию html. Поскольку мне нужно, чтобы пользователи могли сортировать по field_display_date (по убыванию), а также по релевантности, я представил два вида: релевантность и дату (используя это пользовательское поле даты) и добавил field_display_date в индекс в формате «дата».
Конечная цель состоит в том, чтобы иметь возможность получать высокорелевантные результаты поиска, но иметь возможность сортировать их, чтобы увидеть самые последние высокорелевантные результаты. Возможно, есть совершенно другой способ сделать это.
Проблема: Когда все настроено, введите поисковый запрос и выполните. Если для сортировки установлено значение «релевантность» по умолчанию, результаты возвращаются довольно быстро. Если я изменю сортировку на «дата» (field_display_date: по убыванию) и отправлю снова, будет очень долгое время ожидания, часто тайм-аут шлюза.
В том, что не истекло время ожидания, SQL-представление и снижение производительности сказали это...
Запрос
Индекс: main2
Ключи: «тест»
Разобранные ключи: массив (
'#союз' => 'И',
0 => 'тест',
)
Искомые поля: rendered_item, title
Сортировка: field_display_date DESC
Опции: массив (
'search_api_view' => 'объект (Drupal\views\ViewExecutable)',
'search_api_base_path' => 'search2',
)
Поиск по названию2
Путь /поиск2
Время построения запроса 1,43 мс
Время выполнения запроса 2,81 мс
Просмотр времени рендеринга 43237,89 мс
Почему время рендеринга такое большое, и есть идеи, как это исправить? Кроме того, переход на apache solr может работать лучше или иметь тот же результат? (Поскольку настройка solr выглядит довольно сложной и займет у меня довольно много времени, хотелось бы знать, стоит ли это делать.)
Напротив, вот то же представление, индекс и ключевое слово поиска, отсортированные по релевантности...
Запрос
Индекс: main2
Ключи: «тест»
Разобранные ключи: массив (
'#союз' => 'И',
0 => 'тест',
)
Искомые поля: rendered_item, title
Сортировка: search_api_relevance DESC
Опции: массив (
'search_api_view' => 'объект (Drupal\views\ViewExecutable)',
'search_api_base_path' => 'search2',
)
Поиск по названию2
Путь /поиск2
Время построения запроса 1,23 мс
Время выполнения запроса 2,68 мс
Время рендеринга просмотра 2990,91 мс
Кажется, это говорит о том, что сам поиск и получение результата выполняются довольно быстро, но по какой-то причине загрузка страницы очень медленная?
Интересно, что полный обход поискового API и простое включение поля body в обычное представление и поиск по ключевому слову дает более быстрый результат, что заставляет меня думать, что я делаю что-то неправильно на фундаментальном уровне.
Фильтр простых представлений без индекса, отсортированный по убыванию field_display_date, поиск в поле body по одному и тому же ключевому слову...
Название Содержание
Путь /admin/content/node2
Время построения запроса 3,23 мс
Время выполнения запроса 1,2 мс
Просмотр времени рендеринга 6291,28 мс