wordpress自带搜索增加结果相关性代码

WordPress自带搜索增加结果相关性代码

作为使用WordPress的网站管理员,我们都知道WordPress自带了搜索功能。但是,它的结果相关性通常不太理想,搜索结果不够准确,排在较前的结果也不一定是最相关的。这篇文章将介绍如何增加WordPress自带搜索结果相关性的代码。

1. 增加搜索结果排序参数

首先,我们需要增加一个搜索结果排序参数。这个参数将使搜索结果根据其相关性进行排序。我们可以在functions.php文件中添加以下代码:

//增加搜索结果排序参数
function search_sort_by_relevance($query) {
    if (is_search()) {
        $query->set('orderby', 'relevance');
    }
    return $query;
}
add_action('pre_get_posts', 'search_sort_by_relevance');

这段代码将增加一个名为“orderby”、值为“relevance”的参数,它将使搜索结果根据相关性进行排序。

2. 增加相关性权重

但是,仅仅有排序参数是不够的。我们还需要增加一些相关性权重参数,以便搜索算法更准确地确定哪些内容最相关。我们可以在functions.php文件中添加以下代码:

//增加相关性权重
function search_by_title($search, $wp_query) {
    if (empty($search))
    return $search;

    global $wpdb;
    $q = $wp_query->query_vars;
    $n = !empty($q['exact']) ? '' : '%';
    $search = $searchand = '';

    foreach ((array)$q['search_terms'] as $term) {
        $term = esc_sql($wpdb->esc_like($term));
        $search.= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }

    return "($search)";
}
function wpft_search_orderby_relevance($orderby, $wp_query) {
    global $wpdb;
    if ($wp_query->is_search()) {
        return '($wpdb->posts.post_title LIKE '%'.$wp_query->query_vars['s'].'%') DESC, wp_posts.post_modified_gmt DESC';
    }
    return $orderby;
}
add_filter('posts_where', 'search_by_title', 10, 2);
add_filter('posts_orderby', 'wpft_search_orderby_relevance', 10, 2);

这段代码将增加一些相关性权重,其中包括标题、正文、标签等。这些权重将使得搜索算法更准确地确定哪些内容最相关。

3. 增加搜索结果相关性计算

最后,我们需要引入WP Query Search Rewrite插件,它提供一个相关性值计算公式,可以让我们更准确地确定哪些内容最相关。我们可以在functions.php中添加以下代码:

//引入WP Query Search Rewrite插件
require_once( ABSPATH . WPINC . '/query.php' );

//相关性值计算公式
function wp_ft_search_where($where, &$wp_query){
    global $wpdb;
    if($wp_query->is_search()){
        $where = preg_replace(
            "/(s*".$wpdb->posts.".post_titles+LIKEs*('[^']+')s*)/",
            "(".$wpdb->posts.".post_title REGEXP $1) +
            (0.8 * (MATCH (".$wpdb->posts.".post_title) AGAINST ($1 IN BOOLEAN MODE)))", $where );
        $where = preg_replace(
            "/(s*".$wpdb->posts.".post_contents+LIKEs*('[^']+')s*)/",
            "(".$wpdb->posts.".post_content REGEXP $1) +
            (0.6 * (MATCH (".$wpdb->posts.".post_content) AGAINST ($1 IN BOOLEAN MODE)))", $where );
        $where = preg_replace(
            "/(s*".$wpdb->terms.".names+LIKEs*('[^']+')s*)/",
            "(".$wpdb->terms.".name REGEXP $1)", $where );
    }
    return $where;
}
add_filter('posts_where', 'wp_ft_search_where', 9999, 2);

4. 测试搜索结果

完成后,你应该会看到搜索结果质量得到了明显提高。你可以测试一下搜索功能,并在搜索结果中查看相关性最高的内容。

总结

通过以上几部操作,我们就可以增加WordPress自带搜索的相关性,并让搜索结果更加准确。这样的使用体验对于用户来说,也会更加友好。如果你对搜索算法比较熟悉,也可以尝试自己编写相关性相关的算法,进一步优化搜索结果。

晓白博客网版权所有,原文地址https://www.xbnb.cn/5329
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容