Lines Matching +full:dokuwiki +full:-
3 namespace dokuwiki\test\Search\Collection;
5 use dokuwiki\Search\Collection\CollectionSearch;
6 use dokuwiki\Search\Index\MemoryIndex;
7 use dokuwiki\Search\Tokenizer;
16 $collection->lock();
17 $collection->addEntity('page1', ['dokuwiki', 'dokuwiki', 'dokuwikis', 'doku', 'wiki']);
18 $collection->addEntity('page2', ['dokuwiki', 'other', 'words']);
19 $collection->unlock();
23 $term = $search->addTerm('dokuwiki');
26 $search->execute();
29 $this->assertEquals(['dokuwiki'], $term->getTokens());
30 // the dokuwiki token is two times on page1 and 1 time on page2
31 $this->assertEquals(['page1' => 2, 'page2' => 1], $term->getEntityFrequencies());
33 $this->assertEquals(['dokuwiki' => 2], $term->getMatches()['page1']);
34 $this->assertEquals(['dokuwiki' => 1], $term->getMatches()['page2']);
40 // page1 has: dokuwiki(x2), dokuwikis, doku, wiki
41 // page2 has: dokuwiki, other, words
43 $collection->lock();
44 $collection->addEntity('page1', ['dokuwiki', 'dokuwiki', 'dokuwikis', 'doku', 'wiki']);
45 $collection->addEntity('page2', ['dokuwiki', 'other', 'words']);
46 $collection->unlock();
49 $endWild = $search->addTerm('doku*');
50 $startWild = $search->addTerm('*wiki');
51 $bothWild = $search->addTerm('*kuwi*');
52 $search->execute();
54 // doku* should match: doku(4), dokuwiki(8), dokuwikis(9)
55 $endTokens = $endWild->getTokens();
57 $this->assertEquals(['doku', 'dokuwiki', 'dokuwikis'], $endTokens);
58 // page1 has doku(1) + dokuwiki(2) + dokuwikis(1) = 4, page2 has dokuwiki(1) = 1
59 $this->assertEquals(['page1' => 4, 'page2' => 1], $endWild->getEntityFrequencies());
61 // *wiki should match: dokuwiki(8), wiki(4)
62 $startTokens = $startWild->getTokens();
64 $this->assertEquals(['dokuwiki', 'wiki'], $startTokens);
65 // page1 has dokuwiki(2) + wiki(1) = 3, page2 has dokuwiki(1) = 1
66 $this->assertEquals(['page1' => 3, 'page2' => 1], $startWild->getEntityFrequencies());
68 // *kuwi* should match: dokuwiki(8), dokuwikis(9)
69 $bothTokens = $bothWild->getTokens();
71 $this->assertEquals(['dokuwiki', 'dokuwikis'], $bothTokens);
72 // page1 has dokuwiki(2) + dokuwikis(1) = 3, page2 has dokuwiki(1) = 1
73 $this->assertEquals(['page1' => 3, 'page2' => 1], $bothWild->getEntityFrequencies());
85 $collection->lock();
86 $collection->addEntity('search:test', $tokens);
87 $collection->unlock();
90 $exact = $search->addTerm('dokuwiki');
91 $wild = $search->addTerm('plugin*');
92 $search->execute();
94 // "dokuwiki" appears 4 times in the text (case-insensitive tokenization)
95 $this->assertEquals(['dokuwiki'], $exact->getTokens());
96 $this->assertEquals(['search:test' => 4], $exact->getEntityFrequencies());
99 $wildTokens = $wild->getTokens();
100 $this->assertContains('plugins', $wildTokens);
101 $this->assertNotEmpty($wild->getEntityFrequencies());
102 $this->assertArrayHasKey('search:test', $wild->getEntityFrequencies());
108 $collection->lock();
109 $collection->addEntity('page1', ['alpha', 'beta', 'gamma']);
110 $collection->unlock();
113 $term = $search->addTerm('zzzznotfound');
114 $search->execute();
116 $this->assertEmpty($term->getTokens());
117 $this->assertEmpty($term->getEntityFrequencies());
118 $this->assertEmpty($term->getMatches());
121 // --- metadata-style search tests (using addTerm/execute without length restrictions) ---
124 * Exact search on a non-split LookupCollection
129 $collection->lock();
130 $collection->addEntity('wiki:start', ['wiki:syntax', 'wiki:welcome']);
131 $collection->addEntity('wiki:other', ['wiki:syntax']);
132 $collection->unlock();
135 $term = $search->addTerm('wiki:syntax');
136 $search->execute();
138 $pages = array_keys($term->getEntityFrequencies());
140 $this->assertEquals(['wiki:other', 'wiki:start'], $pages);
144 * Wildcard search on a non-split LookupCollection
149 $collection->lock();
150 $collection->addEntity('wiki:start', ['wiki:syntax', 'wiki:welcome']);
151 $collection->addEntity('wiki:other', ['wiki:syntax', 'other:page']);
152 $collection->unlock();
156 $term = $search->addTerm('wiki:*');
157 $search->execute();
159 $pages = array_keys($term->getEntityFrequencies());
162 $this->assertEquals(['wiki:other', 'wiki:start'], $pages);
166 $term2 = $search2->addTerm('*syntax');
167 $search2->execute();
169 $pages2 = array_keys($term2->getEntityFrequencies());
171 $this->assertEquals(['wiki:other', 'wiki:start'], $pages2);
175 * Case-insensitive search on a non-split LookupCollection
180 $collection->lock();
181 $collection->addEntity('wiki:start', ['Apple', 'Banana']);
182 $collection->addEntity('wiki:other', ['Cherry', 'Apple Pie']);
183 $collection->unlock();
186 $search->caseInsensitive();
187 $term = $search->addTerm('*apple*');
188 $search->execute();
190 $pages = array_keys($term->getEntityFrequencies());
192 $this->assertEquals(['wiki:other', 'wiki:start'], $pages);
196 * Search on a DirectCollection (title-style 1:1 mapping)
201 $collection->lock();
202 $collection->addEntity('wiki:start', ['Welcome to DokuWiki']);
203 $collection->addEntity('wiki:syntax', ['Formatting Syntax']);
204 $collection->addEntity('wiki:other', ['Other Page']);
205 $collection->unlock();
209 $term = $search->addTerm('Welcome to DokuWiki');
210 $search->execute();
211 $this->assertEquals(['wiki:start'], array_keys($term->getEntityFrequencies()));
215 $term2 = $search2->addTerm('*Syntax');
216 $search2->execute();
217 $this->assertEquals(['wiki:syntax'], array_keys($term2->getEntityFrequencies()));
219 // case-insensitive substring match
221 $search3->caseInsensitive();
222 $term3 = $search3->addTerm('*wiki*');
223 $search3->execute();
224 $this->assertEquals(['wiki:start'], array_keys($term3->getEntityFrequencies()));
233 $collection->lock();
234 $collection->addEntity('wiki:start', ['wiki:syntax', 'wiki:welcome']);
235 $collection->addEntity('wiki:other', ['wiki:syntax']);
236 $collection->unlock();
239 $term1 = $search->addTerm('wiki:syntax');
240 $term2 = $search->addTerm('wiki:welcome');
241 $term3 = $search->addTerm('nonexistent');
242 $search->execute();
244 $syntax = array_keys($term1->getEntityFrequencies());
246 $this->assertEquals(['wiki:other', 'wiki:start'], $syntax);
247 $this->assertEquals(['wiki:start'], array_keys($term2->getEntityFrequencies()));
248 $this->assertEquals([], array_keys($term3->getEntityFrequencies()));
257 $collection->lock();
258 $collection->addEntity('page1', ['dokuwiki', 'wiki', 'doku']);
259 $collection->addEntity('page2', ['dokuwiki', 'other']);
260 $collection->unlock();
263 $term = $search->addTerm('dokuwiki');
264 $search->execute();
266 $pages = array_keys($term->getEntityFrequencies());
268 $this->assertEquals(['page1', 'page2'], $pages);
279 $term = $search->addTerm('anything');
280 $search->execute();
281 $this->assertEquals([], $term->getEntityFrequencies());
292 $term = $search->addTerm('anything');
293 $search->execute();
294 $this->assertEquals([], $term->getEntityFrequencies());