Как работает поиск в WordPress изнутри?

27 сент. 2013 г., 18:48:47
Просмотры: 19.3K
Голосов: 13

Я использую поиск WordPress для поиска по набору пользовательских типов записей и позволяю пользователям углубляться в каждый отдельный тип записи.

Однако я заметил, что WordPress не возвращает то, что я считаю "наилучшими" совпадениями в первую очередь. Например, при поиске по слову "Microsoft" страницы, где этот термин встречается редко, все равно показываются выше страниц, где он используется регулярно.

По сути, я пытаюсь найти информацию о том, как WordPress ранжирует страницы и определяет релевантность, и можно ли повлиять на этот процесс без установки каких-либо плагинов.

Любая помощь будет очень ценной.

3
Комментарии

Это слишком общий вопрос для этого сайта — ознакомьтесь с разделами что можно спрашивать и что не стоит спрашивать. Я быстро погуглил и нашел это: Как сделать поиск в WordPress менее убогим (статья от 2008 года, так что результаты могут отличаться). Что касается изменения функциональности без плагинов — если у вас аллергия на чужие плагины, вам, вероятно, придется написать свой собственный. Плагины просто влияют на работу WP, а это именно то, что вы пытаетесь сделать. Верно?

Pat J Pat J
27 сент. 2013 г. 19:09:28

Спасибо, дело не в том, что я хочу избегать использования чужих плагинов, а скорее в том, что я хочу избежать "расползания плагинов", то есть ситуации: "О, мне нужен плагин для этого и того", и вот у вас уже работает 30 плагинов.

chrisd chrisd
30 сент. 2013 г. 16:33:47

Я понимаю и сочувствую. У меня тоже работает несколько плагинов, но часть из них я написал сам.

Pat J Pat J
30 сент. 2013 г. 17:32:55
Все ответы на вопрос 2
2
10

РЕДАКТИРОВАНИЕ - Текущая версия WordPress поддерживает релевантность, поэтому этот ответ больше не актуален.


В WordPress нет концепции ранжирования или релевантности, это просто простой LIKE запрос по заголовку и содержанию записи:

($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')

Вы можете использовать фильтр posts_search для изменения или полной замены поискового запроса на свой собственный. Из /wp-includes/query.php:

// Позволяет плагинам контекстно добавлять/удалять/изменять раздел поиска в запросе к БД
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

Также см. доступные фильтры запросов на странице Codex WP_Query.

27 сент. 2013 г. 19:27:27
Комментарии

Забавно, что ты это сказал... Нацин закоммитил код для сортировки по релевантности примерно час назад. На самом деле, вероятно, в то же время, когда ты писал свой ответ. :)

http://core.trac.wordpress.org/changeset/25632

Dave Ross Dave Ross
27 сент. 2013 г. 21:04:54

Для больших/популярных блогов поиск по всему контенту довольно нереалистичен. Какой рекомендуемый способ ускорить это, не просто удаляя "OR (...)" из query.php? Стоит ли задавать новый вопрос или ты можешь расширить свой ответ?

Jay Brunet Jay Brunet
24 янв. 2014 г. 06:03:11
0

Начиная с WordPress 3.7 (октябрь 2013), результаты поиска сортируются по следующим критериям (см. тикет 7394):

  • Полное совпадение фразы в заголовках записей.
  • Все поисковые термины в заголовках записей.
  • Любые поисковые термины в заголовках записей.
  • Полное совпадение фразы в содержимом записей.

Каждая секция и оставшиеся записи затем сортируются по дате.

Также добавлены новые фильтры:

  • wp_search_stopwords — для фильтрации стоп-слов, игнорируемых в WHERE.
  • posts_search_orderby — для фильтрации ORDER BY при сортировке результатов поиска.
16 февр. 2014 г. 19:54:09