197 lines
5.0 KiB
C++
197 lines
5.0 KiB
C++
/*------------------------------------------------------------------------------
|
|
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
|
|
*
|
|
* Distributable under the terms of either the Apache License (Version 2.0) or
|
|
* the GNU Lesser General Public License, as specified in the COPYING file.
|
|
------------------------------------------------------------------------------*/
|
|
#include "test.h"
|
|
|
|
#ifndef NO_WILDCARD_QUERY
|
|
|
|
void _testWildcard(CuTest* tc, IndexSearcher* searcher, const TCHAR* qt, int expectedLen){
|
|
Term* term = _CLNEW Term(_T("body"), qt);
|
|
Query* query = _CLNEW WildcardQuery(term);
|
|
|
|
//test the wildcardquery
|
|
Hits* result = searcher->search(query);
|
|
CLUCENE_ASSERT(expectedLen == result->length());
|
|
_CLDELETE(result);
|
|
_CLDELETE(query);
|
|
|
|
|
|
//now test wildcardfilter
|
|
Filter* filter = _CLNEW WildcardFilter(term);
|
|
BitSet* bits = filter->bits(searcher->getReader());
|
|
CLUCENE_ASSERT(expectedLen == bits->count());
|
|
_CLDELETE(filter);
|
|
_CLDELETE(bits);
|
|
|
|
_CLDECDELETE(term);
|
|
}
|
|
|
|
void testFuzzyQuery(CuTest *tc){
|
|
RAMDirectory ram;
|
|
|
|
//---
|
|
WhitespaceAnalyzer an;
|
|
IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true);
|
|
|
|
//---
|
|
Document *doc = 0;
|
|
//****
|
|
doc = _CLNEW Document();
|
|
doc->add(*Field::UnStored(_T("body"), _T("test")));
|
|
writer->addDocument(doc);
|
|
_CLDELETE(doc);
|
|
//****
|
|
doc = _CLNEW Document();
|
|
doc->add(*Field::UnStored(_T("body"), _T("home")));
|
|
writer->addDocument(doc);
|
|
_CLDELETE(doc);
|
|
//****
|
|
doc = _CLNEW Document();
|
|
doc->add(*Field::UnStored(_T("body"), _T("pc linux")));
|
|
writer->addDocument(doc);
|
|
_CLDELETE(doc);
|
|
//****
|
|
doc = _CLNEW Document();
|
|
doc->add(*Field::UnStored(_T("body"), _T("tested")));
|
|
writer->addDocument(doc);
|
|
_CLDELETE(doc);
|
|
//****
|
|
doc = _CLNEW Document();
|
|
doc->add(*Field::UnStored(_T("body"), _T("source")));
|
|
writer->addDocument(doc);
|
|
_CLDELETE(doc);
|
|
|
|
//---
|
|
//writer->optimize(); //test unoptimized
|
|
writer->close();
|
|
_CLDELETE(writer);
|
|
|
|
//---
|
|
IndexSearcher searcher (&ram);
|
|
|
|
//---
|
|
Term* term = _CLNEW Term(_T("body"), _T("test~"));
|
|
Query* query = _CLNEW FuzzyQuery(term);
|
|
Hits* result = searcher.search(query);
|
|
|
|
CLUCENE_ASSERT(result && result->length() > 0);
|
|
|
|
//---
|
|
_CLDELETE(result);
|
|
_CLDELETE(query);
|
|
_CLDECDELETE(term);
|
|
searcher.close();
|
|
ram.close();
|
|
}
|
|
|
|
|
|
void testAsterisk(CuTest *tc){
|
|
RAMDirectory indexStore;
|
|
SimpleAnalyzer an;
|
|
IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true);
|
|
Document doc1;
|
|
Document doc2;
|
|
doc1.add(*Field::Text(_T("body"), _T("metal")));
|
|
doc2.add(*Field::Text(_T("body"), _T("metals")));
|
|
|
|
writer->addDocument(&doc1);
|
|
writer->addDocument(&doc2);
|
|
writer->optimize();
|
|
writer->close();
|
|
_CLDELETE(writer);
|
|
//////////////////////////////////////////////////
|
|
|
|
IndexReader* reader = IndexReader::open(&indexStore);
|
|
IndexSearcher* searcher = _CLNEW IndexSearcher(reader);
|
|
|
|
_testWildcard(tc, searcher, _T("metal*"), 2);
|
|
_testWildcard(tc, searcher, _T("m*tal"), 1);
|
|
_testWildcard(tc, searcher, _T("m*tal*"), 2);
|
|
|
|
|
|
Term* term = _CLNEW Term(_T("body"), _T("metal"));
|
|
Query* query1 = _CLNEW TermQuery(term);
|
|
_CLDECDELETE(term);
|
|
|
|
Hits* result = searcher->search(query1);
|
|
CLUCENE_ASSERT(1 == result->length());
|
|
_CLDELETE(result);
|
|
_CLDELETE(query1);
|
|
|
|
|
|
indexStore.close();
|
|
searcher->close();
|
|
reader->close();
|
|
_CLDELETE(reader);
|
|
_CLDELETE(searcher);
|
|
}
|
|
|
|
void testQuestionmark(CuTest *tc){
|
|
RAMDirectory indexStore;
|
|
SimpleAnalyzer an;
|
|
IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true);
|
|
Document doc1;
|
|
Document doc2;
|
|
Document doc3;
|
|
Document doc4;
|
|
doc1.add(*Field::Text(_T("body"), _T("metal")));
|
|
doc2.add(*Field::Text(_T("body"), _T("metals")));
|
|
doc3.add(*Field::Text(_T("body"), _T("mXtals")));
|
|
doc4.add(*Field::Text(_T("body"), _T("mXtXls")));
|
|
writer->addDocument(&doc1);
|
|
writer->addDocument(&doc2);
|
|
writer->addDocument(&doc3);
|
|
writer->addDocument(&doc4);
|
|
writer->optimize();
|
|
writer->close();
|
|
_CLDELETE(writer);
|
|
//////////////////////////////////////////////////////
|
|
|
|
IndexReader* reader = IndexReader::open(&indexStore);
|
|
IndexSearcher* searcher = _CLNEW IndexSearcher(reader);
|
|
|
|
|
|
_testWildcard(tc, searcher, _T("m?tal"), 1);
|
|
_testWildcard(tc, searcher, _T("metal?"), 2);
|
|
_testWildcard(tc, searcher, _T("metals?"), 1);
|
|
_testWildcard(tc, searcher, _T("m?t?ls"), 3);
|
|
|
|
indexStore.close();
|
|
reader->close();
|
|
searcher->close();
|
|
_CLDELETE(reader);
|
|
_CLDELETE(searcher);
|
|
}
|
|
#else
|
|
void _NO_WILDCARD_QUERY(CuTest *tc){
|
|
CuNotImpl(tc,_T("Wildcard"));
|
|
}
|
|
void _NO_FUZZY_QUERY(CuTest *tc){
|
|
CuNotImpl(tc,_T("Fuzzy"));
|
|
}
|
|
#endif
|
|
|
|
|
|
CuSuite *testwildcard(void)
|
|
{
|
|
CuSuite *suite = CuSuiteNew(_T("CLucene Wildcard Test"));
|
|
|
|
#ifndef NO_FUZZY_QUERY
|
|
SUITE_ADD_TEST(suite, testFuzzyQuery);
|
|
#else
|
|
SUITE_ADD_TEST(suite, _NO_FUZZY_QUERY);
|
|
#endif
|
|
#ifndef NO_WILDCARD_QUERY
|
|
SUITE_ADD_TEST(suite, testQuestionmark);
|
|
SUITE_ADD_TEST(suite, testAsterisk);
|
|
#else
|
|
SUITE_ADD_TEST(suite, _NO_WILDCARD_QUERY);
|
|
#endif
|
|
|
|
return suite;
|
|
}
|
|
// EOF
|