我对MongoDB数据库有一个非常奇怪的问题。我有一个有近10,000条记录的集合。它有一个复合索引和一个常规索引。
复合指数:
{
is_archived: 1,
name: 'text',
ean: 'text',
model: 'text',
mpn: 'text',
upc: 'text',
notes: 'text'
}
常规:
{
is_archived: 1
}
假设集合中有这样的记录:
{
is_archived: false,
name: 'String1 string2 string3 string4'
ean: '',
model: '',
mpn: '',
upc: '',
notes: ''
}
这样的查询(目标是以任何顺序返回包含所有这些单词的所有文档):
db.collection.find({
is_archived: false,
$text: {
$search: '"String1""string2""string3""string4"'
}
})
将返回上述文件。
像这样的查询:
db.collection.find({
is_archived: false,
$text: {
$search: '"String1""string2"'
}
})
将返回上述文件。
像这样的查询:
db.collection.find({
is_archived: false,
$text: {
$search: '"string2""string3"'
}
})
将返回上述文件。
像这样的查询:
db.collection.find({
is_archived: false,
$text: {
$search: '"String1""string3"'
}
})
赢了< tt 返回上述声明。
同样的问题也会出现在其他文件中,但不会出现在所有文件中。
我想问两个问题:
explain
吗?谢谢你们,这个问题真让我疯狂。
答案 0 :(得分:0)
默认情况下,短语搜索对所有指定的关键字进行OR搜索,即它将查找包含关键字String1,String2,String3或String4的文档
db.collection.find({$text: {$search: "String1 String3"}}, {score: {$meta: "text Score"}}).sort({score:{$meta:"text Score"}})
我认为你错过了String1和String3之间的空间。