1

私は次のようなものを探しています:

if(magicSearch("hot pizza","We sell pizza that is really hot") {//Found!}

両方の単語が (任意の順序で) 表示される場合にのみ "true" が必要で、検索対象のテキスト内の "a"、"and"、"the" などを無視する必要があります。

(私が探しているものを説明するためのより良い用語があると確信しています)

さまざまな DB エンジンがこのタイプのテキスト検索 (Mongodb など) をサポートしているのを見てきましたが、文字列をテストする単純な JavaScript の方法が必要です。私はそれを作ることができますが、それはすでにどこかにあるに違いない何かのように感じます.

グレッグ

4

2 に答える 2

1

underscore.jsを使用すると、比較的単純な実装を行うことができます

var stopwords_set = ["a", "and", "the" ];
var magicSearch = function (keywords, str) {
    var content_set = {};
    var keywords_set = {};

    _.each(keywords.split(' '), function(item){
        keywords_set[item.toLowerCase()] = 1;
    });

    _.each(str.split(' '), function(item){
        content_set[item.toLowerCase()] = 1;
    });

    //convert input to 2 sets excluding stop words
    content_set = _.without(_.keys(content_set), stopwords_set);
    keywords_set = _.without(_.keys(keywords_set), stopwords_set);

    //check the intersecion
    var value = _.intersection(content_set, keywords_set).length == keywords_set.length
    return value;
}

magicSearch("hot pizza","We sell pizza that is really hot");
于 2013-07-31T04:26:33.977 に答える