テキスト検索
MongoDB は、string コンテンツに対するテキスト検索クエリをサポートするためにテキスト インデックスを提供します。 テキストインデックスには、値が string または複数の string 配列である任意のフィールドを含めることができます。
注意
MongoDB Atlas は、より強力で柔軟なテキスト検索ソリューションであるAtlas Searchも提供しています。 このセクションの残りの部分では、Atlas Search ではなく、テキスト インデックスについて説明します。
Mongoid を使用してテキスト検索を実行するには、次の手順に従います。
モデルに テキスト インデックス を定義します。
サーバー上にテキスト インデックスを作成します。
テキスト検索クエリを作成します。
テキスト検索インデックスの定義
Mongoid によるインデックス定義について詳しくは、 インデックスページで説明されています。 テキスト検索インデックスは、MongoDB マニュアルのテキスト インデックスで詳しく説明されています。 以下は、説明フィールドを利用したテキストインデックスを持つ帯域モデルの定義例です。
class Band include Mongoid::Document field :name, type: String field :description, type: String index description: 'text' end
インデックス タイプ( text
)は、シンボルではなく string として指定する必要があることに注意してください。
テキストインデックスの作成
インデックスを作成するには、次のようにdb:mongoid:create_indexes
Rake タスクを呼び出します。
bundle exec rake db:mongoid:create_indexes
テキストインデックスを使用したクエリ
説明に「Once」またはそのバリエーションが含まれているバンドを検索するには、 $text 演算子を使用します。
Band.where('$text' => {'$search' => 'ounces'}).to_a # => [#<Band _id: 5d5341b3ce4ef35d5016746d, name: "foo", description: "ounce">]
検索クエリが「Onces」であったにもかかわらず、説明に「Once」という単語が含まれていることに注意してください。
また、テキスト検索を実行する場合、フィールド名が明示的に指定されていないことにも注意してください$text
演算子は、 テキストインデックス でインデックス付けされたすべてのフィールドを検索します。