日本語検索の修正

(09/10/14)このページでやっている事と同じ結果になるAsian Searchプラグインが作られたため、このページは参考程度になります。なお、このプラグインはDokuWiki本体に組み込まれる予定

DokuWikiは、日本語で検索すると検索結果のハイライトがおかしくなります。見つけたページに行ってもそのハイライトが引き継がれるため、少々見づらい状態になる事もしばしばあります。

ここでは、MeCab導入による分かち書き…ではなく、fulltext.phpを少しいじって検索機能をちょっとだけ手直しする方法を紹介します。

コード

/inc/fulltext.php内のhandle phrase searches処理(2009-02-14版だと417行目)が始まる直前に、以下を挿入します。

    $dqarray = array();
    $noarray = array();
    while(preg_match('/"(.*?)"/',$query,$match)){
        $dqarray[] = $match[0];
        $query = preg_replace('/"(.*?)"/','',$query,1);
    }
    $query = preg_replace('/[\x{3000}]/u',' ',$query);
    $noarray = explode(' ',$query);
        foreach($noarray as $key=>$value){
            if(preg_match('/^-(.*?)/u',$value)){
            }elseif(preg_match('/(('.IDX_ASIAN.')+)/u',$value)){
                $value = '"'.$value.'"';
                $noarray[$key] = $value;
            }
        }
    $query = implode(' ',$dqarray).' '.implode(' ',$noarray);

見ればわかるかと思いますが、handle phrase searchesと似たような事をやっています。明らかに冗長ですが…。

なお、ヒット数はおかしいままです。