Как работает поиск в WordPress изнутри?
Я использую поиск WordPress для поиска по набору пользовательских типов записей и позволяю пользователям углубляться в каждый отдельный тип записи.
Однако я заметил, что WordPress не возвращает то, что я считаю "наилучшими" совпадениями в первую очередь. Например, при поиске по слову "Microsoft" страницы, где этот термин встречается редко, все равно показываются выше страниц, где он используется регулярно.
По сути, я пытаюсь найти информацию о том, как WordPress ранжирует страницы и определяет релевантность, и можно ли повлиять на этот процесс без установки каких-либо плагинов.
Любая помощь будет очень ценной.

РЕДАКТИРОВАНИЕ - Текущая версия 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
.

Забавно, что ты это сказал... Нацин закоммитил код для сортировки по релевантности примерно час назад. На самом деле, вероятно, в то же время, когда ты писал свой ответ. :)
http://core.trac.wordpress.org/changeset/25632

Начиная с WordPress 3.7 (октябрь 2013), результаты поиска сортируются по следующим критериям (см. тикет 7394):
- Полное совпадение фразы в заголовках записей.
- Все поисковые термины в заголовках записей.
- Любые поисковые термины в заголовках записей.
- Полное совпадение фразы в содержимом записей.
Каждая секция и оставшиеся записи затем сортируются по дате.
Также добавлены новые фильтры:
wp_search_stopwords
— для фильтрации стоп-слов, игнорируемых вWHERE
.posts_search_orderby
— для фильтрацииORDER BY
при сортировке результатов поиска.
