mongoid 搜索中的正则表达式

Regex in mongoid search

我对如何在 mongoid 中使用文本搜索实现正则表达式感到有点困惑

我像这样用我的联系人模型建立索引:

index(FirstName: "text", LastName: "text")

在我的搜索操作中,我有:

search = '/.*' + search_string + '.*/'
@contacts.collection.find( { '$text': { '$search': search } }, "collation" => { "locale" => "en_US" } )

所以当我传递一个字符串时,例如 "Joh",我希望它 return 不区分大小写的结果将包括名称为 "Majoh", "Majohboo""John" 因为正则表达式我在搜索字符串周围添加了。

我做错了什么,我的查询应该怎样才能实现? 如果我无法通过文本类型索引实现这一点,那么您会推荐我用什么来替换我的索引?

您似乎混淆了正则表达式查询和全文搜索。

要执行正则表达式查询,请传递正则表达式:

irb(main):002:0> Band.create!(name: 'hello')
=> #<Band _id: 5e4b39e5026d7c7b6fcfc1ad, name: "hello", description: nil>
irb(main):003:0> Band.collection.find(name: /el/).first
=> {"_id"=>BSON::ObjectId('5e4b39e5026d7c7b6fcfc1ad'), "name"=>"hello"}
irb(main):004:0> Band.collection.find(name: /EL/).first
=> nil
irb(main):006:0> Band.collection.find(name: /EL/i).first
=> {"_id"=>BSON::ObjectId('5e4b39e5026d7c7b6fcfc1ad'), "name"=>"hello"}

这不使用 $text 运算符。

要执行全文搜索,请参阅 https://docs.mongodb.com/mongoid/master/tutorials/mongoid-queries/#full-text-search。这不使用正则表达式。

您需要了解全文搜索和正则表达式查询之间的区别。每个都有它的用途。与全文搜索相比,开发人员通常更熟悉正则表达式,因此阅读全文搜索的工作原理也许会让您受益。全文搜索不适用于任意单词片段,因为它是在词位的基础上工作的。正则表达式不会缩减为单词词素,因此对于许多自然语言查询来说是一个糟糕的选择。

如果您想使用正则表达式进行查询,您可以通过将多个条件(每个字段一个)与 $or 组合来在多个字段上执行此操作。如果你想全文搜索,正则表达式不适用,定义一个全文搜索索引包含你想搜索的所有字段并使用 $text 运算符。