Как поиск WordPress работает за кулисами?

11

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

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

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

Любая помощь высоко ценится.

chrisd
источник
2
Это ужасно широкий вопрос для этого сайта - посмотрите, что спрашивать, а что не спрашивать . Я сделал пару быстрых поисков в Google и наткнулся на это: сделать WordPress 'Search Suck Less меньше (хотя это было с '08, поэтому YMMV). Что касается влияния на функциональность без плагинов - если у вас аллергия на плагины других, вам, вероятно, придется написать один из них. Плагины просто влияют на работу WP, и это то, что вы пытаетесь сделать. Правильно?
Пэт Дж
1
Спасибо, дело не в том, что я не хочу избегать использования плагинов других, скорее в том, что я хочу избежать «разрастания плагинов», то есть «О, у меня будет плагин для того и этого», и, прежде чем вы это узнаете, у вас 30 из них работает.
2013 г.
Я понимаю и сочувствую. Я запустил несколько плагинов, но я написал несколько из них.
Пэт Дж

Ответы:

10

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

// Allow plugins to contextually add/remove/modify the search section of the database query
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

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

Milo
источник
4
Забавно, что вы должны сказать, что ... Nacin ввел код для сортировки по релевантности около часа назад. На самом деле, вероятно, в то же время, когда вы писали свой ответ. :) core.trac.wordpress.org/changeset/25632
Дейв Росс,
Для больших / популярных блогов поиск по всему контенту довольно нереалистичен. Каков рекомендуемый способ ускорить это, не удаляя просто «ИЛИ (...)» из query.php? Должен ли я задать новый вопрос или вы можете расширить свой ответ?
PJ Brunet
5

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

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

Каждый раздел и все оставшиеся сообщения сортируются по дате.

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

  • wp_search_stopwords, чтобы отфильтровать стоп-слова, игнорируемые в WHERE.
  • posts_search_orderby, для фильтрации ORDER BYпри заказе результатов поиска.
Фуксия
источник