[英]PHP: find 3-char words in query string to augment MySQL full-text search
我正在使用CakePHP網站上的一個簡單的MySQL全文搜索功能,並且注意到MySQL從查詢中去除了短詞(不超過3個字符)。 該站點中的某些項目有3個字符標題,但是,我想將它們包括在結果中。 (由於預算限制,我已經排除了使用像Solr這樣的更強大的搜索設備)
因此,我想在查詢字符串中找到任何3個字符的單詞,然后僅在標題字段上進行快速查找。 我可以想到的最簡單的方法是對字符串進行explode()
並使用strlen()
遍歷結果數組以查找3個字符的單詞。 然后,我將使用這些單詞並在“標題”字段中進行“ LIKE
搜索,以確保不會遺漏明顯應該出現在結果中的內容。
有沒有更好/更簡單的方法來解決這個問題?
更新:是的,我知道MySQL中的ft_min_word_len
設置。 我想我不想這樣做。
有一個名為“ ft_min_word_len”的系統選項,通過該選項可以定義要索引的單詞的最小長度。 您可以將此配置指令的值設置為較低的值(例如2):它位於MySQL配置文件的[mysqld]部分下。 該文件通常位於“ / etc / mysql”或“ / etc”下。 在Windows中,您可以在Windows目錄或MySQL主文件夾下查看。
[mysqld]
ft_min_word_len=2
除非有人有更好的方法而不涉及ft_min_word_len
,否則我現在要ft_min_word_len
我的最初想法。 (如果我可以在每個數據庫級別上使用它,我可能會考慮使用它-否則它的影響范圍就太廣了。)
我有一個這樣的功能:
$query = str_replace(array(',', '.'), '', $query);
$terms = explode(' ', $query);
$short = '';
foreach($terms as $term){
if(strlen($term) == 3){
$short .= '"'.$term.'", ';
}
}
if(!empty($short)){
$short = trim($short, ', ');
}
return $short;
然后,我使用返回的字符串搜索title
列: WHERE title IN ($short)
,以補充全文搜索。 我任意分配3.5分,以便可以將返回的記錄與其他全文搜索命中一起排序(我選擇了一個相對較高的分數,因為它與記錄title
完全匹配)。
這對我來說不是很優雅,但是可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.