/* * Copyright 2004-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.compass.core.test.querybuilder; import java.util.Calendar; import org.compass.core.CompassException; import org.compass.core.CompassHits; import org.compass.core.CompassQueryBuilder; import org.compass.core.CompassSession; import org.compass.core.CompassTransaction; import org.compass.core.config.CompassEnvironment; import org.compass.core.config.CompassSettings; import org.compass.core.test.AbstractTestCase; /** * @author kimchy */ public class QueryBuilderTests extends AbstractTestCase { protected String[] getMappings() { return new String[]{"querybuilder/querybuilder.cpm.xml"}; } protected void addSettings(CompassSettings settings) { settings.setGroupSettings(CompassEnvironment.Converter.PREFIX, CompassEnvironment.Converter.DefaultTypes.Simple.DATE, new String[]{CompassEnvironment.Converter.Format.FORMAT}, new String[]{"yyyy-MM-dd-HH"}); } private void setUpData(CompassSession session) { Calendar calendar = Calendar.getInstance(); A a = new A(); a.setId(new Long(1)); a.setValue1("0001"); a.setValue2("test1"); calendar.set(2000, 1, 1); a.setDate(calendar.getTime()); session.save("a", a); a.setId(new Long(2)); a.setValue1("0002"); a.setValue2("test2"); calendar.set(2000, 1, 2); a.setDate(calendar.getTime()); session.save("a", a); a.setId(new Long(3)); a.setValue1("0003"); a.setValue2("test3"); calendar.set(2000, 1, 3); a.setDate(calendar.getTime()); session.save("a", a); a.setId(new Long(4)); a.setValue1("0004"); a.setValue2("the quick brown fox jumped over the lazy dog"); calendar.set(2000, 1, 4); a.setDate(calendar.getTime()); session.save("a", a); } public void testCustomFormatForDate() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); Calendar calendar = Calendar.getInstance(); calendar.set(2000, 1, 1); A a = new A(); a.setId(new Long(1)); a.setValue1("0001"); a.setValue2("test1"); a.setDate(calendar.getTime()); session.save("a1", a); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.term("a1.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); hits = queryBuilder.term("a1.date.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); calendar.set(2001, 1, 1); hits = queryBuilder.term("a1.date", calendar.getTime()).hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testMultiPropertyQueryString() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.multiPropertyQueryString("test1 OR 0002").add("mvalue1") .add("mvalue2").toQuery().hits(); assertEquals(2, hits.length()); tr.commit(); session.close(); } public void testEqAlias() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.alias("a").hits(); assertEquals(4, hits.length()); try { queryBuilder.alias("b").hits(); fail(); } catch (CompassException e) { // this is ok } tr.commit(); session.close(); } public void testQueryString() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); assertEquals(1, session.queryBuilder().queryString("mvalue1:0001").toQuery().hits().length()); tr.commit(); session.close(); } public void testEq() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.term("mvalue1", "0001").hits(); assertEquals(1, hits.length()); hits = queryBuilder.term("mvalue2", "brown").hits(); assertEquals(1, hits.length()); hits = queryBuilder.term("mvalue2", "test").hits(); assertEquals(0, hits.length()); Calendar calendar = Calendar.getInstance(); calendar.set(2000, 1, 1); hits = queryBuilder.term("a.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); hits = queryBuilder.term("a.date.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); calendar.set(2001, 1, 1); hits = queryBuilder.term("a.date", calendar.getTime()).hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testBetween() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.between("mvalue1", "0001", "0003", true).hits(); assertEquals(3, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.between("mvalue1", "0001", "0003", false).hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testGt() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.gt("mvalue1", "0002").hits(); assertEquals(2, hits.length()); tr.commit(); session.close(); } public void testGe() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.ge("mvalue1", "0002").hits(); assertEquals(3, hits.length()); tr.commit(); session.close(); } public void testLt() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.lt("mvalue1", "0002").hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testLe() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.le("mvalue1", "0002").hits(); assertEquals(2, hits.length()); tr.commit(); session.close(); } public void testPrefix() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.prefix("mvalue1", "000").hits(); assertEquals(4, hits.length()); hits = queryBuilder.prefix("a.value1", "000").hits(); assertEquals(4, hits.length()); // test escaping hits = queryBuilder.prefix("'a.value1'", "000").hits(); assertEquals(0, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.prefix("mvalue1", "0002").hits(); assertEquals(1, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.prefix("mvalue1", "001").hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testWildcard() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.wildcard("mvalue1", "000*").hits(); assertEquals(4, hits.length()); hits = queryBuilder.wildcard("a.value1", "000*").hits(); assertEquals(4, hits.length()); hits = queryBuilder.wildcard("a.value1.mvalue1", "000*").hits(); assertEquals(4, hits.length()); tr.commit(); session.close(); } public void testPhrase() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.multiPhrase("mvalue2").setSlop(0).add("quick").add("fox").toQuery().hits(); assertEquals(0, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.multiPhrase("mvalue2").setSlop(1).add("quick").add("fox").toQuery().hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testFuzzy() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); A a = new A(); a.setId(new Long(1)); a.setValue1("wuzzy"); session.save("a", a); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.fuzzy("mvalue1", "wuzza").hits(); assertEquals(1, hits.length()); hits = queryBuilder.fuzzy("a.value1.mvalue1", "wuzza").hits(); assertEquals(1, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.fuzzy("mvalue1", "wuzza", 0.9999f).hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testBool() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.bool().addMust(queryBuilder.term("mvalue1", "0001")).toQuery().hits(); assertEquals(1, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.bool().addMust(queryBuilder.term("mvalue1", "0001")).addMust( queryBuilder.term("mvalue2", "test1")).toQuery().hits(); assertEquals(1, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.bool().addMust(queryBuilder.term("mvalue1", "0001")).addMust( queryBuilder.term("mvalue2", "test2")).toQuery().hits(); assertEquals(0, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.bool().addMust(queryBuilder.term("mvalue1", "0001")).addMustNot( queryBuilder.term("mvalue2", "test1")).toQuery().hits(); assertEquals(0, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.bool().addMust(queryBuilder.term("mvalue1", "0001")).addShould( queryBuilder.term("mvalue2", "test2XXX")).toQuery().hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testSpanEq() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.spanEq("mvalue1", "0001").hits(); assertEquals(1, hits.length()); hits = queryBuilder.spanEq("mvalue2", "test").hits(); assertEquals(0, hits.length()); Calendar calendar = Calendar.getInstance(); calendar.set(2000, 1, 1); hits = queryBuilder.spanEq("a.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); hits = queryBuilder.spanEq("a.date.date", calendar.getTime()).hits(); assertEquals(1, hits.length()); calendar.set(2001, 1, 1); hits = queryBuilder.spanEq("a.date", calendar.getTime()).hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testSpanFirst() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.spanFirst("mvalue2", "brown", 1).hits(); assertEquals(0, hits.length()); queryBuilder = session.queryBuilder(); hits = queryBuilder.spanFirst("mvalue2", "brown", 2).hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testSpanNear() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.spanNear("mvalue2").add("quick").add("brown").add("dog").setSlop(0).setInOrder( true).toQuery().hits(); assertEquals(0, hits.length()); hits = queryBuilder.spanNear("mvalue2").add("quick").add("brown").add("dog").setSlop(3).setInOrder(true) .toQuery().hits(); assertEquals(0, hits.length()); hits = queryBuilder.spanNear("mvalue2").add("quick").add("brown").add("dog").setSlop(4).setInOrder(true) .toQuery().hits(); assertEquals(1, hits.length()); hits = queryBuilder.spanNear("mvalue2").add("lazy").add("fox").setSlop(3).setInOrder(false).toQuery().hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } public void testSpanNot() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.spanNot( queryBuilder.spanNear("mvalue2").add("quick").add("fox").setSlop(1).setInOrder(true).toQuery(), queryBuilder.spanEq("mvalue2", "dog")).hits(); assertEquals(1, hits.length()); hits = queryBuilder.spanNot( queryBuilder.spanNear("mvalue2").add("quick").add("fox").setSlop(1).setInOrder(true).toQuery(), queryBuilder.spanEq("mvalue2", "brown")).hits(); assertEquals(0, hits.length()); tr.commit(); session.close(); } public void testSpanOr() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); setUpData(session); CompassQueryBuilder queryBuilder = session.queryBuilder(); CompassHits hits = queryBuilder.spanOr().add(queryBuilder.spanEq("mvalue2", "quick")).add( queryBuilder.spanEq("mvalue2", "notthere")).toQuery().hits(); assertEquals(1, hits.length()); tr.commit(); session.close(); } }