1

Web アプリケーションのテキスト検索をセットアップしようとしています。私のmysqlクエリは次のとおりです。

SELECT * FROM t1 WHERE MATCH (c1,c2,c3) AGAINST (:keyStr IN BOOLEAN MODE)

:keyStr 内のすべての単語を一致させたいので、keyStr は次のようになります。

:keyStr='+word[0]* +word[1]* +word[2]* + ... +word[n]*'

word[x] がストップワードであるか、最小単語長よりも短い場合、クエリは null を返します。最善の解決策は、ストップワードから「+」を削除するか、:keyStr からストップワードを完全に削除することだと思います。

これを行う良い方法はありますか?クエリを実行する前に、単語 [x] が stopwords_list に含まれているかどうかを確認する必要がありますか?

4

1 に答える 1

1

JavaScript でこれを実現する簡単な方法は次のとおりです。

var apart = "Some +example search that I made up".toLowerCase().replace(/[\+\-\?]*/g, '').split(' '),
    stop_words = ['the', 'that', 'a', 'example'],
    min_word_length = 1;

// filter the array to remove stop words
apart.filter( function( item ) {
    if ( item.length < min_word_length ) return false;
    return stop_words.indexOf( item ) === -1;
});

編集:擬似コードの意味では、上記のコードは機能しますが、ここにPHPソリューションがあります

$query = "This is my example search query";

$search = explode(' ', $query);

$stop_words = array('is', 'a', 'the');

$terms = array_filter($search, function($item){
    return !in_array($item, $stop_words);
});

$formatted = array_map(function($term){
    return '+'.mysql_escape_string($term).'*';
}, $terms);

// :keyStr = implode(' ', $formatted);
于 2013-02-23T22:01:44.937 に答える