MongoDBとMongooseで全文検索を実行する最良の方法 質問する

MongoDBとMongooseで全文検索を実行する最良の方法 質問する

私は何日も Google で検索しており、いろいろ試してみましたが、ユーザー コレクションで適切な全文検索をまだ実行できません。

ElasticSearch を試してみましたが、クエリとページ分割がほとんど不可能でした...

ElMongo、mongoose-full-text、Mongoosastic など、Mongoose 用の多くのプラグインを試しましたが、どれもドキュメントが非常に悪く、適切な全文検索を実行する方法がわかりません。

つまり、私のコレクションは通常のコレクションです。

user = {
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
}

ページにシンプルな検索入力がありPOST、入力すると、hello worldコレクション フィールド全体で検索クエリに一致する単語を検索し、結果を取得する必要があります。

1 ページあたり 10 項目などのページネーションを処理するオプションがあると非常に便利です...

これを実現するための最善の解決策は何ですか? Mongoose、NodeJS、ExpressJS とともに MongoDB 2.6.* を使用しています。

ありがとう。

ベストアンサー1

追加することができますテキストインデックスMongooseスキーマ定義に追加して、$textクエリに演算子を使用すると、findテキスト インデックスに含まれるすべてのフィールドを検索できます。

たとえば、およびのテキスト検索をサポートするインデックスを作成するには、次のようにしnameますprofile.something

var schema = new Schema({
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
});
schema.index({name: 'text', 'profile.something': 'text'});

または、インデックスにすべての文字列フィールドを含める場合は、'$**'ワイルドカードを使用します。

schema.index({'$**': 'text'});

これにより、次のようなページ化されたテキスト検索クエリを実行できるようになります。

MyModel.find({$text: {$search: searchString}})
       .skip(20)
       .limit(10)
       .exec(function(err, docs) { ... });

詳細については、全文をお読みください。MongoDB テキスト インデックスドキュメンテーション。

おすすめ記事