MongoDB:文本索引包括非字符串数据类型

问题描述:

如何创建基于不是字符串的值的可搜索索引?例如:MongoDB:文本索引包括非字符串数据类型

> db.people.ensureIndex({age: 'text', first_name: 'text', last_name:'text', _id:'text'}) 
> db.people.insert({age: 27, first_name:"Freddie", last_name: "Mercury"}) 

> db.people.find()[0] 
{ "_id" : ObjectId("5441ebe78fe20d0fae7b05b6"), "age" : 27, "first_name" : "Freddie", "last_name" : "Mercury" }) 

> db.people.find({$text: {$search: '5441ebe78fe20d0fae7b05b6'}}) 
(no results) 
> db.people.find({$text: {$search: '27'}}) 
(no results) 

我想创建一个基于几个键可搜索的索引,但其中一些是NumberLong,的ObjectId等$搜索需要的字符串。客户也可以发送如"27 Freddie"这样的查询。为了索引/搜索的目的,我可以强制索引将所有值转换为字符串吗?

对我而言,听起来有些人会使用'27 Freddie'这样的搜索字词,我宁愿允许用户提供不同的字段:年龄,名字,姓氏。

在你的情况下,我会创建额外的领域,其中我将纳入所有文本可搜索字段,并添加一个搜索文本索引。例如:

{ 
    age: 27, 
    first_name:"Freddie", 
    last_name: "Mercury", 
    search : '27 Freddie Mercury' 
} 
+0

诚然,组合字段不太可能,但是,能够搜索'freddie mercury'(组合字段),但不能用于整数字段对于客户端来说似乎是不直观的。 手动添加搜索字段可以正常工作,但在更新期间难以维护。例如:如果kay/val对被删除,“search”索引是否失败?每次更新一个字段时,是否会生成一个全新的索引字符串?这些只是Mongo已经解决的大部分问题(文本索引在默认情况下是稀疏的)。 – KFunk 2014-10-19 08:21:29