アプリケーションにフルテキスト機能を提供するために使用している配列「キー」にインデックスがあります。
2.4.3のリリースでは、「テキスト」インデックスタイプを利用したいと思います。配列「キー」の「テキスト」インデックスタイプに保険をかけましたが、非常に高速に動作するようです(古いキーワードのフルテキスト方式よりも高速です)。
問題は、私のアプリはフィールドが包括的(AND)であると想定していることです。デフォルトでは、テキスト検索は私のパラメーターとORをとります。
誰もが包括的にテキスト検索を実行する方法を知っていますか?
例えば:
db.supplies.runCommand("text", {search:"printer ink"})
プリンターまたはインクのすべての結果ではなく、プリンターとインクの両方で結果を返す必要があります。
試してみてください:
db.supplies.runCommand("text", {search:"\"printer\" \"ink\""})
また、ここに docs からの引用があります:
検索文字列にフレーズが含まれる場合、検索は検索文字列内の他の用語とANDを実行します。例えば"\" twinkle twinkle\"little star"を検索すると、 "twinkle twinkle"および( "little"または "star")が検索されます。
お役に立てば幸いです。
各Wordを二重引用符で囲むことができます。
let keywords = ctx.params.query.split(/\s+/).map(kw => `"${kw}"`).join(' ');
match.$text = { $search: keywords, $caseSensitive: false };
ユーザーが引用符付き文字列を入力した場合、これは機能しません。最初に引用符で囲まれた文字列を解析する必要があります。
前に@alecxeが指摘したように、テキストインデックス列でAND検索を行うには、各検索ワードを二重引用符で囲む必要があります。以下は、要件に対応した簡単なワンライナーです。
db.supplies.runCommand("text", {search: "printer ink".split(" ").map(str => "\""+str+"\"").join(' ')})