WordPress搜索如何在后台工作?


11

我正在使用WordPress搜索来搜索一系列自定义帖子类型,并允许用户向下钻取每种单独的帖子类型。

但是我发现WordPress并没有首先返回我认为是“最佳”比赛的东西。例如,如果我搜索Microsoft,则在不定期包含该术语的页面之前,仍会返回这些页面。

基本上,我试图找到有关WordPress如何对页面进行排名和确定相关性以及是否可以在不安装任何插件的情况下影响它的信息。

任何帮助,不胜感激。


2
对于这个网站,这是一个可怕的广泛问题-请参阅要问不问的部分。我在Google上进行了一些快速搜索,发现:减少WordPress的Search Suck(尽管它来自'08,所以是YMMV)。至于没有插件的影响功能-如果您对其他人的插件过敏,则可能必须编写自己的插件。插件只会影响WP的功能,而这正是您想要做的。对?
Pat J

1
谢谢,不是我要避免使用其他人的插件,更多的是我要避免“插件泛滥”,即“哦,我将为此提供一个插件”,在您知道之前,您有30个正在运行。
克里斯(Chrisd)2013年

我理解并同情。我运行了许多插件,但是我写了很多。
Pat J

Answers:


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


4
有趣的是,您应该说……Nacin在一小时前就按相关性对代码进行了排序。实际上,可能是在您编写答案的同时。:) core.trac.wordpress.org/changeset/25632
戴夫·罗斯

对于大型/流行博客,搜索所有内容是不现实的。在不从query.php中删除“或(...)”的情况下,建议采用哪种加速方法?我应该提交一个新问题,还是可以扩大答案?
PJ Brunet 2014年

5

WordPress 3.7(2013年10月)开始,搜索结果将按以下条件排序(请参见故障单7394):

  • 帖子标题中的完整句子匹配。
  • 帖子标题中的所有搜索词。
  • 帖子标题中的任何搜索词。
  • 句子内容中的完整句子匹配。

然后按日期对每个部分和所有剩余的帖子进行排序。

也有新的过滤器:

  • wp_search_stopwords,以过滤在中忽略的停用词WHERE
  • posts_search_orderby,以ORDER BY在订购搜索结果时过滤。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.