WordPress提高搜索結果的相關性(準確度)

WordPress本身的搜索結果是按照發佈時間排序的,這樣的搜索結果的相關性並不強,應該讓搜索結果按照內容相關性排序,而不是按照時間或者 ID,所以我們可以在當前主題的 functions.php 添加如下代碼來增強 WordPress 搜索的相關性:

1
2
3
4
5
6
7
8
9
10
//提高搜索結果相關性
if(is_search()){
add_filter('posts_orderby_request', 'search_orderby_filter');
}
function search_orderby_filter($orderby = ''){
	global $wpdb;
	$keyword = $wpdb->prepare($_REQUEST['s']);
	return "((CASE WHEN {$wpdb->posts}.post_title LIKE '%{$keyword}%' THEN 2 ELSE 0 END) + (CASE WHEN {$wpdb->posts}.post_content LIKE '%{$keyword}%' THEN 1 ELSE 0 END)) DESC,
{$wpdb->posts}.post_modified DESC, {$wpdb->posts}.ID ASC";
}

//提高搜索結果相關性
if(is_search()){
add_filter(‘posts_orderby_request’, ‘search_orderby_filter’);
}
function search_orderby_filter($orderby = ”){
global $wpdb;
$keyword = $wpdb->prepare($_REQUEST[‘s’]);
return "((CASE WHEN {$wpdb->posts}.post_title LIKE ‘%{$keyword}%’ THEN 2 ELSE 0 END) + (CASE WHEN {$wpdb->posts}.post_content LIKE ‘%{$keyword}%’ THEN 1 ELSE 0 END)) DESC,
{$wpdb->posts}.post_modified DESC, {$wpdb->posts}.ID ASC";
}

上面的排序方法很簡單:當文章標題含有關鍵字的時候給予權重值 2,內容裡含有關鍵字的時候給予權重值 1,把兩個權重值相加以後降序排列。然後才用文章修改時間和ID降序作為候補排序方法。這樣一來,搜索出來的結果就更加準確瞭。

發佈留言