假设我的mongo数据库中有以下数据:
{
"_id" : ObjectId("582b89866b6347a422ab525d"),
"phnum" : "+11111230023",
"fax" : "",
"description" "11111230023"
}
和
{
"_id" : ObjectId("582b89866b6347a422ab525d"),
"phnum" : "+12221230023",
"fax" : "",
"description" ""
}
我通过执行以下操作创建了一个索引:
> use widgets
switched to db widgets
> db.ph.createIndex( { "$**": "text" } ,{ default_language: "english" }, {name:"widgettextindex"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
然后确认它就像那样:
> db.ph.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "widgets.ph"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "$**_text",
"ns" : "widgets.ph",
"default_language" : "english",
"weights" : {
"$**" : 1
},
"language_override" : "language",
"textIndexVersion" : 2
}
]
>
问题
当我尝试运行“0023”的查询时,我只回复了两个文件中的一个。
> db.ph.find({'$text':{'$search':'0023'}})
{ "_id" : ObjectId("582b897b6b6347a422ab49c0"), "phnum" : "+11111230023", "fax" : "", "description" : "11111230023" }
问题
感谢。
PS。我有两个mongo服务器......一个是3.0.4,另一个是3.2.10。我两个都有同样的问题...这让我觉得这是我创建索引的方式的问题。
编辑1
仔细检查后,系统似乎没有在phnum字段中查找匹配项 我以前没有注意到一直被返回的记录在描述中有一个phnum的副本。 作为测试,我将文本“0023”添加到搜索未返回的文档中的描述字段中。然后我重试了搜索,现在两个记录都被退回了。
如何让索引适用于所有字段? 我认为“$ **”语法会索引所有字段。
哦,这个问题也是通过mongo命令行发生的。不只是通过PHP mongoclient。我会更新帖子的标题。
编辑2
我还尝试通过明确列出我要搜索的字段来重新创建索引:
> db.did.createIndex( {"phnum": "text","description":"text"} ,{ default_language: "english" }, {"name":"didtextindex"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
但这仍然无法解决问题。我无法在phnum字段中搜索值。