从查询

时间:2015-07-11 13:53:11

标签: mongodb indexing full-text-search mongodb-query

我已经阅读了MongoDB documentation以获取集合中的索引,并且还搜索了SO和Google以查询我的问题。我想得到实际的索引值。

或许我对MongoDB索引的错误理解。如果我一直在索引一个名为text的字段,其中包含段落,我是否正确地认为索引的内容是段落中的每个单词?

无论是哪种情况,我都想检索已编入索引的值,db.collection.getIndexes()似乎没有返回。

2 个答案:

答案 0 :(得分:2)

是的,不,总的来说。

索引处理它们提供给索引的字段的“值”,并且非常像“卡索引”,因为有一个参考点可以查找匹配该术语的位置。

“你”似乎在询问的是"text indexes"。这是MongoDB和其他数据库中的一种特殊索引格式,它查看字段的“文本”内容,并将该内容中的每个“单词”分解为该“索引”中的值。

通常我们这样做:

db.collection.createIndex({ "text": "text" })

这里的“字段名称”是你提出的“文字”,但更重要的是这里的索引类型是“text”。

这允许您插入如下数据:

db.collection.insert({ "text": "The quick brown fox jumped over the lazy dog" })

然后使用$text运算符进行搜索:

db.collection.find({ "$text": { "$search": "brown fox" } })

对于您在查询中提供的字词,它将返回并“排名”,具体取决于它们与您的集合索引中字段的给定“文本”的匹配程度。

请注意,“text”索引及其查询不会在特定字段上进行交互。但索引本身可以在多个领域进行。查询和“索引”本身的约束是任何给定集合上只能存在“一个”文本索引,否则会发生错误。

答案 1 :(得分:0)

根据mongodb的文档:

" db.collection.getIndexes()返回一个包含集合索引信息的文档数组。索引信息包括用于创建索引的键和选项。有关键和索引选项的信息,请参阅db.collection.createIndex()。"

首先必须使用createIndex()方法在集合上创建索引:

db.records.createIndex( { userid: 1 } )

索引支持userid字段的查询:

示例:

db.records.find( { userid: 2 } )
db.records.find( { userid: { $gt: 10 } } )

索引可帮助您避免扫描整个文档。它们基本上是对集合中特定部分的引用或指针。

文档更好地解释了它:

http://docs.mongodb.org/manual/tutorial/create-an-index/