[解決済み] 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アイテムか何かのようなページ分割を処理するためのオプションを持っていることは本当に素晴らしいだろう...
これを達成するための最良の解決策は何ですか?私は MongoDB 2.6.* と Mongoose、NodeJS、ExpressJS を使用しています。
ありがとうございます。
どのように解決するのですか?
あなたは
テキストインデックス
を 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 テキストインデックス のドキュメントをご覧ください。
関連
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] モバイル端末の検出にはどのような方法がありますか?
-
[解決済み] jQueryでJavaScriptオブジェクトから選択する際に、オプションを追加する最も良い方法は何ですか?
-
[解決済み] JavaScriptで整数の除算を行い、余りを別途取得する方法は?
-
[解決済み】MongoDBとMongooseの違いについて
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?