MongoDB $text
搜索不支持部分匹配。 MongoDB 允许支持对字符串内容进行文本搜索查询,并支持不区分大小写和stemming.
看看你的例子:
// 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:回答这个问题“是否可以使用正则表达式”.
假设name
属性包含值seasons
你正在寻找seaso
那么以下内容将与您的文档匹配:
db.X.find({type: {$regex: /^seaso/}})
更多详情请参阅the docs https://docs.mongodb.com/manual/reference/operator/query/regex/ but ...
- 这会not使用您的文本索引,因此如果您继续使用
$regex
运算符,那么您将不需要文本索引。
- 指数覆盖率
$regex
运算符可能不是您所期望的,简要总结如下:如果您的搜索值是锚定的(即,seaso
, 而不是easons
) 那么 MongoDB 可以使用索引,但否则不能。