我很好奇MongoDB用来存储全文搜索索引的数据结构。我在文档中找不到任何相关描述。
阅读initial commit,似乎过去常常使用B树:
/*
* GO: sets the tree cursors on each term in terms, processes the terms by advancing
* the terms cursors and storing the partial
* results and lastly calculates the top results
* @param results, the priority queue containing the top results
* @param limit, number of results in the priority queue
*/
void FTSSearch::go(Results* results, unsigned limit ) {
vector< shared_ptr<BtreeCursor> > cursors;
for ( unsigned i = 0; i < _query.getTerms().size(); i++ ) {
const string& term = _query.getTerms()[i];
BSONObj min = FTSIndexFormat::getIndexKey( MAX_WEIGHT, term, _indexPrefix );
BSONObj max = FTSIndexFormat::getIndexKey( 0, term, _indexPrefix );
shared_ptr<BtreeCursor> c( BtreeCursor::make( _ns, _id, min, max, true, -1 ) );
cursors.push_back( c );
}
但是当前版本中不存在fts_search.cpp,我找不到current implementation中对数据结构的任何引用。
它还是B树吗? (它曾经是吗?)它是一个特里?这有什么不同吗?
答案 0 :(得分:2)
根据fts_index_format.cpp的当前最新标记r3.3.9,它仍然是BTree。
另外值得一提的是,文本索引标记并阻止索引条目的索引字段中的术语。 text index为集合中每个文档的每个索引字段中的每个唯一词干项存储一个索引条目。
有多个版本的文本索引,在MongoDB v3.2中,文本索引版本3是新text
索引的默认版本。另请参阅Text Indexes