#include #include #include "LCRAMDirectory.h" #include "LCIndexWriter.h" #include "LCWhitespaceAnalyzer.h" #include "LCDocument.h" #include "LCIndexSearcher.h" #include "LCTerm.h" #include "LCTermQuery.h" #include "LCBooleanQuery.h" #include "LCHits.h" #include "LCDefaultSimilarity.h" #include "GNUstep.h" #include "TestCheckHits.h" static NSString *FIELD = @"field"; @interface TestSimilarity10: LCDefaultSimilarity @end @interface TestBoolean2: NSObject { LCIndexSearcher *searcher; } @end static NSArray *docFields = nil; @implementation TestBoolean2 - (id) init { self = [super init]; LCRAMDirectory *directory = [[LCRAMDirectory alloc] init]; LCIndexWriter *writer = [[LCIndexWriter alloc] initWithDirectory: directory analyzer: [[LCWhitespaceAnalyzer alloc] init] create: YES]; if (docFields == nil) { docFields = [[NSArray alloc] initWithObjects: @"w1 w2 w3 w4 w5", @"w1 w3 w2 w3", @"w1 xx w2 yy w3", @"w1 w3 xx w2 yy w3", nil]; } int i; for (i = 0; i < [docFields count]; i++) { LCDocument *doc = [[LCDocument alloc] init]; LCField *field = [[LCField alloc] initWithName: FIELD string: [docFields objectAtIndex: i] store: LCStore_NO index: LCIndex_Tokenized]; [doc addField: field]; [writer addDocument: doc]; } [writer close]; searcher = [[LCIndexSearcher alloc] initWithDirectory: directory]; return self; } - (void) queries: (LCQuery *) query expDocNrs: (NSArray *) expDocNrs { LCHits *hits = [searcher search: query]; [TestCheckHits checkDocIds: hits results: expDocNrs]; } - (void) testQueries01 { NSLog(@"Test Query \"+w3 +xx\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries02 { NSLog(@"Test Query \"+w3 xx\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", @"1", @"0", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries03 { NSLog(@"Test Query \"w3 xx\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", @"1", @"0", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries04 { NSLog(@"Test Query \"w3 -xx\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; NSArray *a = [NSArray arrayWithObjects: @"1", @"0", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries05 { NSLog(@"Test Query \"+w3 -xx\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; NSArray *a = [NSArray arrayWithObjects: @"1", @"0", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries06 { NSLog(@"Test Query \"+w3 -xx -w5\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; t = [[LCTerm alloc] initWithField: FIELD text: @"w5"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; NSArray *a = [NSArray arrayWithObjects: @"1", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries07 { NSLog(@"Test Query \"-w3 -xx -w5\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; t = [[LCTerm alloc] initWithField: FIELD text: @"w5"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; NSArray *a = [[NSArray alloc] init]; [self queries: b expDocNrs: a]; } - (void) testQueries08 { NSLog(@"Test Query \"+w3 xx -w5\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; t = [[LCTerm alloc] initWithField: FIELD text: @"w5"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST_NOT]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", @"1", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries09 { NSLog(@"Test Query \"+w3 +xx +w2 zz\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"w2"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"zz"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", nil]; [self queries: b expDocNrs: a]; } - (void) testQueries10 { NSLog(@"Test Query \"+w3 +xx +w2 zz\""); LCTerm *t; LCTermQuery *q; LCBooleanQuery *b = [[LCBooleanQuery alloc] init]; t = [[LCTerm alloc] initWithField: FIELD text: @"w3"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"xx"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"w2"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_MUST]; t = [[LCTerm alloc] initWithField: FIELD text: @"zz"]; q = [[LCTermQuery alloc] initWithTerm: t]; [b addQuery: q occur: LCOccur_SHOULD]; NSArray *a = [NSArray arrayWithObjects: @"2", @"3", nil]; [searcher setSimilarity: [[TestSimilarity10 alloc] init]]; [self queries: b expDocNrs: a]; } @end @implementation TestSimilarity10 - (float) coordination: (int) overlap max: (int) maxOverLap { return (float)overlap / ((float)maxOverLap -1); } @end