Рейтинг:0

Сортировка по пользовательскому полю даты медленнее, чем сортировка по релевантности: есть ли решение?

флаг pe

Я использую поисковый 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 мс
sonfd avatar
флаг in
Использует ли ваша сортировка даты данные о дате из вашего индекса? или просто обычное поле даты? Убедитесь, что вы используете данные проиндексированного поля даты.
флаг pe
Это индексированное поле даты. Некоторые другие детали из анализа на данный момент: время рендеринга часто хуже, если я сначала выполняю поиск с сортировкой по релевантности в открытом фильтре, а затем меняю его на дату и применяю. Пока что этот набор шагов кажется хуже, чем поиск с датой в раскрывающемся списке, но я менее уверен в этом. Кроме того: большое влияние оказывает общее количество попаданий. Больше = дольше рендерить. Может быть полезно знать: представление не включает никаких ссылок на сущности для медленных вещей.
флаг pe
Еще одна подсказка: если я использую «отображенный html» в открытом фильтре вместо «полнотекстового поиска», результаты, отсортированные по пользовательскому полю даты (индексированные), будут намного быстрее. Однако визуализированный HTML-фильтр не предлагает сортировку по релевантности. Может быть, мне нужно по умолчанию использовать «сортировку по релевантности и полный текст», но иметь кнопку для направления запроса на «сортировку по дате и отображаемый HTML». Хотя хотелось бы понять, почему так происходит.
флаг pe
Может быть связано с этой проблемой: https://www.drupal.org/project/search_api/issues/3227268 Большая часть обсуждения выходит за рамки моего текущего уровня знаний, поэтому я не уверен в актуальности.
Рейтинг:0
флаг pe

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

Однако я могу сообщить, что установка Solr и переключение индекса на серверную часть Solr привели к тому, что больше не было заметной разницы между одной сортировкой и другой.

Чтобы уточнить: те же представления и поля и та же конфигурация индекса. (В API поиска вы можете переключить серверную часть индекса, а затем переиндексировать). Это привело к очень быстрой сортировке с использованием тех же страниц просмотра результатов поиска.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.