我已经从 mongo shell 为集合 X 创建了一个文本索引
db.X.ensureIndex({name: 'text', cusines: 'text', 'address.city': 'text'})
Run Code Online (Sandbox Code Playgroud)
现在,如果一个文档的 name 属性值为seasons,则其长度为 7
所以如果我运行查找查询(搜索字符串长度<= 5)
db.X.find({$text: {$search: 'seaso'}})
Run Code Online (Sandbox Code Playgroud)
如果我将搜索字符串更改为season (长度 >= 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'}})
Run Code Online (Sandbox Code Playgroud)
因此,这不是输入长度的问题。搜索seaso
不会返回任何匹配项,因为:
seaso
seaso
识别词干的整个单词这假设您的文本索引的语言是英语,您可以通过运行来确认这一点db.X.getIndexes()
,您将在文本索引的定义中看到这一点:
"default_language" : "english"
Run Code Online (Sandbox Code Playgroud)
FWIW,如果您的索引不区分大小写,那么以下内容也将返回匹配项:
db.X.find({$text: {$search: 'SEaSON'}})
db.X.find({$text: {$search: 'SEASONs'}})
Run Code Online (Sandbox Code Playgroud)
更新1:针对这个问题“is it possible to use RegExp”。
假设该name
属性包含该值seasons
并且您正在搜索,seaso
则以下内容将与您的文档匹配:
db.X.find({type: {$regex: /^seaso/}})
Run Code Online (Sandbox Code Playgroud)
文档中有更多详细信息,但是...
$regex
运算符,那么您将不需要文本索引。$regex
可能不是您所期望的,简要总结如下:如果您的搜索值是锚定的(即seaso
,而不是easons
),那么 MongoDB 可以使用索引,但否则不能。 归档时间: |
|
查看次数: |
1892 次 |
最近记录: |