void testIndexData() { /// Create Schema Schema *schema = Schema::create(srch2::instantsearch::DefaultIndex); schema->setPrimaryKey("article_id"); // integer, not searchable schema->setSearchableAttribute("article_id"); // convert id to searchable text schema->setSearchableAttribute("article_authors", 2); // searchable text schema->setSearchableAttribute("article_title", 7); // searchable text /// Create Analyzer SynonymContainer *syn = SynonymContainer::getInstance("", SYNONYM_DONOT_KEEP_ORIGIN); syn->init(); Analyzer *analyzer = new Analyzer(NULL, NULL, NULL, syn, ""); /// Create IndexData string INDEX_DIR = "."; IndexData *indexData = IndexData::create(INDEX_DIR, analyzer, schema, srch2::instantsearch::DISABLE_STEMMER_NORMALIZER); Record *record = new Record(schema); record->setPrimaryKey(1001); record->setSearchableAttributeValue("article_authors", "Tom Smith and Jack Lennon"); record->setSearchableAttributeValue("article_title", "come Yesterday Once More"); record->setRecordBoost(10); indexData->_addRecord(record, analyzer); record->clear(); record->setPrimaryKey(1008); record->setSearchableAttributeValue(0, "Jimi Hendrix"); record->setSearchableAttributeValue(1, "Little wing"); record->setRecordBoost(90); indexData->_addRecord(record, analyzer); indexData->finishBulkLoad(); //index->print_Index(); record->clear(); record->setPrimaryKey(1007); record->setSearchableAttributeValue(0, "Jimaai Hendaarix"); record->setSearchableAttributeValue(1, "Littaale waaing"); record->setRecordBoost(90); indexData->_addRecord(record, analyzer); //index->print_Index(); /// test Trie Trie_Internal *trie = indexData->trie; typedef boost::shared_ptr<TrieRootNodeAndFreeList > TrieRootNodeSharedPtr; TrieRootNodeSharedPtr rootSharedPtr; trie->getTrieRootNode_ReadView(rootSharedPtr); TrieNode *root = rootSharedPtr->root; (void)(root); ASSERT( trie->getTrieNodeFromUtf8String( root, "and")->getId() < trie->getTrieNodeFromUtf8String( root, "come")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "come")->getId() < trie->getTrieNodeFromUtf8String( root, "hendrix")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "hendrix")->getId() < trie->getTrieNodeFromUtf8String( root, "jack")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "jack")->getId() < trie->getTrieNodeFromUtf8String( root, "jimi")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "jimi")->getId() < trie->getTrieNodeFromUtf8String( root, "lennon")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "lennon")->getId() < trie->getTrieNodeFromUtf8String( root, "little")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "little")->getId() < trie->getTrieNodeFromUtf8String( root, "more")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "more")->getId() < trie->getTrieNodeFromUtf8String( root, "once")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "once")->getId() < trie->getTrieNodeFromUtf8String( root, "smith")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "smith")->getId() < trie->getTrieNodeFromUtf8String( root, "tom")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "tom")->getId() < trie->getTrieNodeFromUtf8String( root, "wing")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "wing")->getId() < trie->getTrieNodeFromUtf8String( root, "yesterday")->getId() ); // we assume that there is no background thread does merge, // or even if there is such a background thread, it didn't have a chance to do the merge ASSERT( trie->getTrieNodeFromUtf8String( root, "jimaai") == NULL ); ASSERT( trie->getTrieNodeFromUtf8String( root, "Hendaarix") == NULL ); ASSERT( trie->getTrieNodeFromUtf8String( root, "Littaale") == NULL ); ASSERT( trie->getTrieNodeFromUtf8String( root, "waaing") == NULL ); ASSERT( trie->getTrieNodeFromUtf8String( root, "j")->getMinId() == trie->getTrieNodeFromUtf8String( root, "jack")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "j")->getMaxId() == trie->getTrieNodeFromUtf8String( root, "jimi")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "ja")->getMinId() == trie->getTrieNodeFromUtf8String( root, "jack")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "ja")->getMaxId() == trie->getTrieNodeFromUtf8String( root, "jack")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "win")->getMinId() == trie->getTrieNodeFromUtf8String( root, "wing")->getId() ); ASSERT( trie->getTrieNodeFromUtf8String( root, "win")->getMaxId() == trie->getTrieNodeFromUtf8String( root, "wing")->getId() ); /// test ForwardIndex ForwardIndex *forwardIndex = indexData->forwardIndex; shared_ptr<vectorview<ForwardListPtr> > forwardListDirectoryReadView; forwardIndex->getForwardListDirectory_ReadView(forwardListDirectoryReadView); float score = 0; unsigned keywordId = 1; // define the attributeBitmap only in debug mode #if ASSERT_LEVEL > 0 vector<unsigned> attributeBitmap; #endif ASSERT( forwardIndex->haveWordInRange(forwardListDirectoryReadView, 0, trie->getTrieNodeFromUtf8String( root, "jack")->getId(), trie->getTrieNodeFromUtf8String( root, "lennon")->getId(), vector<unsigned>(), ATTRIBUTES_OP_AND, keywordId, attributeBitmap, score) == true ); ASSERT( forwardIndex->haveWordInRange(forwardListDirectoryReadView, 0, trie->getTrieNodeFromUtf8String( root, "smith")->getId() + 1, trie->getTrieNodeFromUtf8String( root, "tom")->getId() - 1, vector<unsigned>(), ATTRIBUTES_OP_AND, keywordId, attributeBitmap, score) == false ); ASSERT( forwardIndex->haveWordInRange(forwardListDirectoryReadView, 1, trie->getTrieNodeFromUtf8String( root, "hendrix")->getId(), trie->getTrieNodeFromUtf8String( root, "jimi")->getId(), vector<unsigned>(), ATTRIBUTES_OP_AND, keywordId, attributeBitmap, score) == true ); ASSERT( forwardIndex->haveWordInRange(forwardListDirectoryReadView, 1, trie->getTrieNodeFromUtf8String( root, "wing")->getId() + 1, trie->getTrieNodeFromUtf8String( root, "wing")->getId() + 2, vector<unsigned>(), ATTRIBUTES_OP_AND, keywordId, attributeBitmap, score) == false ); /// test InvertedIndex InvertedIndex *invertedIndex = indexData->invertedIndex; (void)(forwardIndex); (void)(invertedIndex); (void)score; (void)keywordId; ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "and")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "come")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "hendrix")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "jack")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "jimi")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "lennon")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "little")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "more")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "once")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "smith")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "tom")->getInvertedListOffset() ) == 1); ASSERT(invertedIndex->getInvertedListSize_ReadView( trie->getTrieNodeFromUtf8String( root, "wing")->getInvertedListOffset() ) == 1); delete schema; delete record; delete analyzer; delete indexData; syn->free(); }