私は数日からGoogleで検索しており、多くのことを試しましたが、それでもユーザーコレクションで適切な全文検索を実行できません。
ElasticSearchを試してみましたが、クエリとページネーションを行うのはかなり不可能でした...
ElMongo、mongoose-full-text、Mongoosasticなど、Mongooseの多くのプラグインを試しました。誰もが本当に文書化されていて、良い全文検索を実行する方法がわかりません。
だから、私のコレクションは通常のコレクションです:
user = {
name: String,
email: String,
profile: {
something: String,
somethingElse: String
}
}
単純なPOST
を含むページに検索入力があります。hello world
と入力すると、コレクションフィールド全体で検索クエリの一致する単語を検索し、結果を取得できます。
また、ページごとに10個のアイテムなどのページネーションを処理するオプションがあることも本当に素晴らしいでしょう...
これを達成するための最良のソリューションは何ですか? Mongoose、NodeJS、およびExpressJSでMongoDB 2.6。*を使用しています。
ありがとう。
テキストインデックス を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 Text Indexes ドキュメントを参照してください。