package com.manning.hsia.dvdstore;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.RangeQuery;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.store.FSDirectoryProvider;
import com.manning.hsia.test.SearchTestCase;
import org.testng.annotations.Test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class TestBadRangeQuery extends SearchTestCase {
int[] numbers = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
@Test(groups="ch07")
public void testNumericRangeQuery() throws Exception {
FullTextSession session = Search.getFullTextSession(openSession());
Transaction tx = session.beginTransaction();
buildIndex(1000, session, tx);
try {
Term lower = new Term("number", "1");
Term upper = new Term("number", "3");
tx = session.beginTransaction();
RangeQuery query = new RangeQuery(lower, upper, true);
System.out.println(query.toString());
org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery(query, Num.class);
List<Num> results = hibQuery.list();
List<String> numbers = new ArrayList<String>();
for (Num num : results) {
numbers.add(num.getNumber() + "");
System.out.println(num.getNumber());
}
assert results.size() == 4: "incorrect return count";
assert numbers.contains("10");
for (Object element : session.createQuery("from " + Num.class.getName()).list()) session.delete(element);
tx.commit();
}
finally {
session.close();
}
}
private void buildIndex(int indexStart, FullTextSession session, Transaction tx) {
for (int x = indexStart; x < numbers.length + indexStart; x++) {
Num num = new Num();
num.setId(x);
num.setNumber(numbers[x - indexStart]);
session.save(num);
}
tx.commit();
session.clear();
}
protected Class[] getMappings() {
return new Class[]{
Num.class
};
}
protected void configure(org.hibernate.cfg.Configuration cfg) {
cfg.setProperty("hibernate.search.default.directory_provider", FSDirectoryProvider.class.getName());
File sub = locateBaseDir();
cfg.setProperty("hibernate.search.default.indexBase", sub.getAbsolutePath());
}
}