001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.core.test.spellcheck.simple;
018:
019: import org.compass.core.CompassHits;
020: import org.compass.core.CompassQuery;
021: import org.compass.core.CompassSession;
022: import org.compass.core.CompassTransaction;
023: import org.compass.core.config.CompassSettings;
024: import org.compass.core.engine.spellcheck.SearchEngineSpellCheckManager;
025: import org.compass.core.lucene.LuceneEnvironment;
026: import org.compass.core.test.AbstractTestCase;
027:
028: /**
029: * @author kimcy
030: */
031: public class SpellCheckTests extends AbstractTestCase {
032:
033: protected String[] getMappings() {
034: return new String[] { "spellcheck/simple/mapping.cpm.xml" };
035: }
036:
037: protected void addSettings(CompassSettings settings) {
038: settings.setBooleanSetting(LuceneEnvironment.SpellCheck.ENABLE,
039: true);
040: settings.setBooleanSetting(
041: LuceneEnvironment.SpellCheck.SCHEDULE, false);
042: }
043:
044: public void testSimpleSpellCheck() {
045: setUpData();
046: SearchEngineSpellCheckManager spellCheckManager = getCompass()
047: .getSpellCheckManager();
048: assertTrue(spellCheckManager.rebuild());
049:
050: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
051: .suggest().getSuggestions();
052: assertEquals(1, suggestions.length);
053: assertEquals("five", suggestions[0]);
054: assertTrue(spellCheckManager.suggestBuilder("five").suggest()
055: .isExists());
056: }
057:
058: public void testSimpleSpellCheckConcurrentRebuild() {
059: setUpData();
060: SearchEngineSpellCheckManager spellCheckManager = getCompass()
061: .getSpellCheckManager();
062: assertTrue(spellCheckManager.concurrentRebuild());
063:
064: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
065: .suggest().getSuggestions();
066: assertEquals(1, suggestions.length);
067: assertEquals("five", suggestions[0]);
068: assertTrue(spellCheckManager.suggestBuilder("five").suggest()
069: .isExists());
070: }
071:
072: public void testSubIndexNarrowing() {
073: setUpData();
074:
075: SearchEngineSpellCheckManager spellCheckManager = getCompass()
076: .getSpellCheckManager();
077: spellCheckManager.rebuild();
078:
079: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
080: .subIndexes("a1").suggest().getSuggestions();
081: assertEquals(1, suggestions.length);
082: assertEquals("five", suggestions[0]);
083: assertTrue(spellCheckManager.suggestBuilder("five").subIndexes(
084: "a1").suggest().isExists());
085:
086: suggestions = spellCheckManager.suggestBuilder("fiv")
087: .subIndexes("a2").suggest().getSuggestions();
088: assertEquals(0, suggestions.length);
089: assertFalse(spellCheckManager.suggestBuilder("five")
090: .subIndexes("a2").suggest().isExists());
091: }
092:
093: public void testAliasNarrowing() {
094: setUpData();
095:
096: SearchEngineSpellCheckManager spellCheckManager = getCompass()
097: .getSpellCheckManager();
098: spellCheckManager.rebuild();
099:
100: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
101: .aliases("a1").suggest().getSuggestions();
102: assertEquals(1, suggestions.length);
103: assertEquals("five", suggestions[0]);
104: assertTrue(spellCheckManager.suggestBuilder("five").aliases(
105: "a1").suggest().isExists());
106:
107: suggestions = spellCheckManager.suggestBuilder("fiv").aliases(
108: "a2").suggest().getSuggestions();
109: assertEquals(0, suggestions.length);
110: assertFalse(spellCheckManager.suggestBuilder("five").aliases(
111: "a2").suggest().isExists());
112: }
113:
114: public void testMorePopular() {
115: setUpData();
116: SearchEngineSpellCheckManager spellCheckManager = getCompass()
117: .getSpellCheckManager();
118: spellCheckManager.rebuild();
119:
120: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
121: .morePopular(true).suggest().getSuggestions();
122: assertEquals(1, suggestions.length);
123: assertEquals("five", suggestions[0]);
124: }
125:
126: public void testNoRebuild() {
127: setUpData();
128: SearchEngineSpellCheckManager spellCheckManager = getCompass()
129: .getSpellCheckManager();
130:
131: String[] suggestions = spellCheckManager.suggestBuilder("fiv")
132: .suggest().getSuggestions();
133: assertEquals(0, suggestions.length);
134: assertFalse(spellCheckManager.suggestBuilder("five").suggest()
135: .isExists());
136: }
137:
138: public void testNoRebuildQuery() {
139: setUpData();
140:
141: CompassSession session = openSession();
142: CompassTransaction tr = session.beginTransaction();
143:
144: CompassQuery query = session.queryBuilder().queryString("fiv")
145: .toQuery();
146: CompassQuery suggeted = query.getSuggestedQuery();
147:
148: assertEquals(false, suggeted.isSuggested());
149: assertEquals("fiv", suggeted.toString());
150:
151: assertFalse(query.isSuggested());
152: assertEquals("fiv", query.toString());
153:
154: tr.commit();
155: session.close();
156: }
157:
158: public void testNoRebuildHits() {
159: setUpData();
160:
161: CompassSession session = openSession();
162: CompassTransaction tr = session.beginTransaction();
163:
164: CompassHits hits = session.queryBuilder().queryString("fiv")
165: .toQuery().hits();
166: CompassQuery query = hits.getQuery();
167: CompassQuery suggeted = hits.getSuggestedQuery();
168:
169: assertEquals(false, suggeted.isSuggested());
170: assertEquals("fiv", suggeted.toString());
171:
172: assertFalse(query.isSuggested());
173: assertEquals("fiv", query.toString());
174:
175: tr.commit();
176: session.close();
177: }
178:
179: public void testRebuildNeeded() throws Exception {
180: setUpData();
181: SearchEngineSpellCheckManager spellCheckManager = getCompass()
182: .getSpellCheckManager();
183:
184: assertTrue(spellCheckManager.isRebuildNeeded());
185: spellCheckManager.rebuild();
186: assertFalse(spellCheckManager.isRebuildNeeded());
187: }
188:
189: public void testSuggestQueryString() {
190: setUpData();
191: SearchEngineSpellCheckManager spellCheckManager = getCompass()
192: .getSpellCheckManager();
193: spellCheckManager.rebuild();
194:
195: CompassSession session = openSession();
196: CompassTransaction tr = session.beginTransaction();
197:
198: assertEquals("fiv", session.queryBuilder().queryString("fiv")
199: .toQuery().toString());
200: assertFalse("fiv", session.queryBuilder().queryString("fiv")
201: .toQuery().isSuggested());
202: assertEquals(0, session.queryBuilder().queryString("fiv")
203: .toQuery().hits().length());
204: assertEquals("five", session.queryBuilder().queryString("fiv")
205: .useSpellCheck().toQuery().toString());
206: assertTrue(session.queryBuilder().queryString("fiv")
207: .useSpellCheck().toQuery().isSuggested());
208: assertEquals(1, session.queryBuilder().queryString("fiv")
209: .useSpellCheck().toQuery().hits().length());
210:
211: assertFalse(session.queryBuilder().queryString("five")
212: .useSpellCheck().toQuery().isSuggested());
213:
214: assertEquals("+fiv +blak", session.queryBuilder().queryString(
215: "fiv blak").toQuery().toString());
216: assertEquals(0, session.queryBuilder().queryString("fiv blak")
217: .toQuery().hits().length());
218: assertEquals("+five +black", session.queryBuilder()
219: .queryString("fiv blak").useSpellCheck().toQuery()
220: .toString());
221: assertEquals(0, session.queryBuilder().queryString("fiv blak")
222: .useSpellCheck().toQuery().hits().length());
223:
224: tr.commit();
225: session.close();
226: }
227:
228: public void testSuggestedQuery() {
229: setUpData();
230: SearchEngineSpellCheckManager spellCheckManager = getCompass()
231: .getSpellCheckManager();
232: spellCheckManager.rebuild();
233:
234: CompassSession session = openSession();
235: CompassTransaction tr = session.beginTransaction();
236:
237: CompassQuery query = session.queryBuilder().queryString("fiv")
238: .toQuery();
239: CompassQuery suggeted = query.getSuggestedQuery();
240: assertEquals(true, suggeted.isSuggested());
241: assertEquals("five", suggeted.toString());
242:
243: assertFalse(query.isSuggested());
244: assertEquals("fiv", query.toString());
245:
246: query = session.queryBuilder().queryString("fiv blak")
247: .toQuery();
248: suggeted = query.getSuggestedQuery();
249: assertEquals(true, suggeted.isSuggested());
250: assertEquals("+five +black", suggeted.toString());
251:
252: assertFalse(query.isSuggested());
253: assertEquals("+fiv +blak", query.toString());
254:
255: tr.commit();
256: session.close();
257: }
258:
259: protected void setUpData() {
260: CompassSession session = openSession();
261: CompassTransaction tr = session.beginTransaction();
262:
263: A a = new A();
264: a.id = 1;
265: a.value1 = "five";
266: a.value2 = "sixteen";
267: session.save("a1", a);
268:
269: a.value1 = "black";
270: a.value2 = "white";
271: session.save("a2", a);
272:
273: tr.commit();
274: session.close();
275: }
276: }
|