文本索引MongoDB,搜索字符串的最小长度
我已经从mongo shell为集合X创建了一个文本索引文本索引MongoDB,搜索字符串的最小长度,mongodb,mongoose,Mongodb,Mongoose,我已经从mongo shell为集合X创建了一个文本索引 db.X.ensureIndex({name: 'text', cusines: 'text', 'address.city': 'text'}) 现在,如果name属性的值为的文档为,则其长度为7 因此,如果我运行find查询(搜索字符串的长度为6),那么它将返回文档 现在我的问题是搜索字符串是否有一些最小长度限制来获取记录。 如果是,那么有没有办法改变它 MongoDB$text搜索不支持部分匹配。MongoDB支持对字符串内容的文
db.X.ensureIndex({name: 'text', cusines: 'text', 'address.city': 'text'})
现在,如果name属性的值为的文档为,则其长度为7
因此,如果我运行find查询(搜索字符串的长度为6),那么它将返回文档
现在我的问题是搜索字符串是否有一些最小长度限制来获取记录。
如果是,那么有没有办法改变它 MongoDB
$text
搜索不支持部分匹配。MongoDB支持对字符串内容的文本搜索查询,并支持大小写不敏感和词干分析
看看你的例子:
// this returns nothing because there is no inferred association between
// the value: 'seasons' and your input: 'seaso'
db.X.find({$text: {$search: 'seaso'}})
// this returns a match because 'season' is seen as a stem of 'seasons'
db.X.find({$text: {$search: 'season'}})
因此,这不是一个与输入长度有关的问题。在seaso上搜索不返回匹配项,因为:
- 您的文本索引不包含整个单词:
seaso
- 您的文本索引不包含
为可识别词干的整个单词seaso
db.X.getIndexes()
来确认这一点,您将在文本索引的定义中看到这一点:
"default_language" : "english"
FWIW,如果索引不区分大小写,则以下内容也将返回匹配项:
db.X.find({$text: {$search: 'SEaSON'}})
db.X.find({$text: {$search: 'SEASONs'}})
更新1:回答这个问题“是否可以使用RegExp”
假设name
属性包含值seasures
,并且您正在使用seaso
搜索,则以下内容将与您的文档匹配:
db.X.find({type: {$regex: /^seaso/}})
更多详情请参阅,但
- 这将不使用文本索引,因此如果您继续使用
运算符,则不需要文本索引$regex
- 使用
运算符的索引覆盖率可能不是您所期望的,简要总结如下:如果您的搜索值是锚定的(即$regex
,而不是seaso
),则MongoDB可以使用索引,但在其他情况下不能使用easons
$regex
。好的,那么就不需要文本索引了,我将使用RegExp和$or操作符使它在多个道具上工作。
db.X.find({type: {$regex: /^seaso/}})