2012-04-22 12 views
1

私のアプリケーションは、フィールドにキーワードのリストがあるMongoデータベースのドキュメントと入力文字列を照合しようとしています。目標は、キーワードが文字列内に存在するかどうかを確認することです。MongoDBサブストリングに一致するクエリ

着信文字列:ここ

は一例です

"John Doe is from Florida and is a fan of American Express" 

のMongoDBの文書のためのフィールドは、次のような値を持っています

in_words: "georgia,american express" 

ので、データベースレコードはinwordsありまたはキーワードはカンマで区切られ、そのうちのいくつかは2単語以上です。

現在のところ、私のRoRアプリケーションは、ドキュメントをプルして、inwords上でsplit( '、')コマンドを発行するそれぞれのinwordを引き出し、それぞれをループし、文字列内に存在するかどうかを確認します。

処理を高速化するために、このタイプの検索を実際のデータベースクエリにプッシュする方法を実際に探したいと思っています。データベースのin_wordsを次のような配列に変更することができます:

in_words: ["georgia", "american express"] 

しかし、私はまだこれをどのようにクエリするのか分かりませんか?

私の目標は、入力された文字列と一致する人物を、その人物のキーワード/キーワードのリストと入力文字列を比較することによって見つけることです。そして、このクエリーをデータベースレイヤー内ですべて実行します。ご提案

答えて

1

を事前に

おかげであなたは間違いなく最初のステップとして、配列にin_wordsを分割する必要があります。

あなたのクエリは依然として扱いにくいものです。

次に、配列フィールドに対して$regexというクエリを使用することを検討してください。

正規表現を作成するのは、入力文字列の任意の単語をマッチさせたい場合や、作品のペア(いくつの単語?)が表示されるので少し難しいでしょう。あなたは、ブログエントリhereから適切な正規表現を構築する方法についていくつかのアイデアを得るかもしれません。入力文字列の部分文字列をデータベースに対して照合しています(通常のLIKE操作の逆です)。

0

これを解決するには、長い文字列を別々のトークンに分割し、別々の配列に入れます。 $allクエリを使用すると、一致するキーワードを効果的に見つけることができます。

チェックアウトサンプル

> db.splitter.insert({tags:'John Doe is from Florida and is a fan of American Express'.split(' ')}) 
> db.splitter.insert({tags:'John Doe is a super man'.split(' ')}) 
> db.splitter.insert({tags:'John cena is a dummy'.split(' ')}) 
> db.splitter.insert({tags:'the rock rocks'.split(' ')}) 

を、あなたが

> db.splitter.find({tags:{$all:['John','Doe']}}) 

を照会するとき、それは

> db.splitter.find({tags:{$all:['John','Doe']}}) 
{ "_id" : ObjectId("4f9435fa3dd9f18b05e6e330"), "tags" : [ "John",  "Doe", "is", "from",  "Florida", "and", "is", "a", "fan", "of", "American",  "Express" ] } 
{ "_id" : ObjectId("4f9436083dd9f18b05e6e331"), "tags" : [ "John", "Doe", "is", "a", "super", "man" ] } 

を返すと覚えているだろう、この操作は、大文字と小文字が区別されます。

あなたは部分一致を探している場合は、代わりに$all

$inを使用また、あなたはおそらく、ノイズワード削除する必要があります(「A」を、「」、「は」...)挿入前に正確なため結果。

私はそれが明確であることを望みます。

+0

私はあなたがその質問を誤解していると信じています。長い文字列はクエリ文字列であり、OPはそれをDBに追加する必要は何も言わない... – drevicko

関連する問題