文本搜索
MongoDB 提供文本索引以支持对字符串内容的文本搜索查询。文本索引可以包括任何值是字符串或字符串元素数组的字段。
注意
MongoDB Atlas 还提供了Atlas Search,这是一个更强大且灵活的文本搜索解决方案。本节剩余部分将讨论文本索引,而不是 Atlas Search。
要使用Mongoid进行文本搜索,请按照以下步骤操作:
在模型上定义文本索引。
在服务器上创建文本索引。
构建文本搜索查询。
定义文本搜索索引
在Mongoid的索引页面上详细描述了索引定义。文本搜索索引在MongoDB手册的文本索引部分有详细描述。以下是一个使用描述字段创建Band模型文本索引的示例定义
class Band include Mongoid::Document field :name, type: String field :description, type: String index description: 'text' end
请注意,索引类型(text
)必须以字符串的形式给出,而不是作为符号。
创建文本索引
要创建索引,请调用db:mongoid:create_indexes
Rake任务
bundle exec rake db:mongoid:create_indexes
使用文本索引进行查询
要查找描述中包含“ounce”或其变体的波段,请使用$text 操作符
Band.where('$text' => {'$search' => 'ounces'}).to_a # => [#<Band _id: 5d5341b3ce4ef35d5016746d, name: "foo", description: "ounce">]
注意,尽管搜索查询是“ounces”,描述中仍然包含单词“ounce”。
另外,在执行文本搜索时,字段名称没有明确指定 - $text
操作符搜索所有使用文本索引索引的字段。