簡體   English   中英

PHP:在查詢字符串中找到3個字符的單詞以增強MySQL全文搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM