1. ホーム
  2. javascript

[解決済み] MongoDB と Mongoose で全文検索を行う最適な方法

2022-12-14 06:40:03

質問

私は何日も前からGoogleで検索しており、多くのことを試しましたが、私のユーザーコレクションで良い全文検索を実行することはできません。

ElasticSearchを試してみましたが、クエリやページ分割がかなり無理でした...。

ElMongo、mongoose-full-text、Mongoosasticなど、Mongooseのプラグインをたくさん試しましたが、どれもドキュメントが不十分で、どのように全文検索を行えばよいのかわかりません。

というわけで、私のコレクションは普通のコレクションです。

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

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

それはまた、1ページあたり10アイテムか何かのようなページ分割を処理するためのオプションを持っていることは本当に素晴らしいだろう...

これを達成するための最良の解決策は何ですか?私は MongoDB 2.6.* と Mongoose、NodeJS、ExpressJS を使用しています。

ありがとうございます。

どのように解決するのですか?

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

テキスト検索をサポートするインデックスを作成するために、例えば nameprofile.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 テキストインデックス のドキュメントをご覧ください。