Compass是在lucene API上封装了一层,意义在于更简洁方便的使用lucene。如hibernate操作对象般轻松。简单的几行代码便能轻松建立索引
public static void IndexCreate() {
CompassConfiguration config = new CompassConfiguration().configure(
"/org/compass/sample/library/compass.cfg.xml").addClass(
Author.class).addClass(Article.class).addClass(Book.class);
Compass compass = config.buildCompass();
CompassSession session = compass.openSession();
CompassTransaction compassTransaction = session.beginTransaction();
Calendar c = Calendar.getInstance();
c.set(1986, 12, 14);
Author a1 = new Author();
a1.setKeywords(new String[] { "喜剧", "小说" });
a1.setBirthdate(c.getTime());
a1.setId(new Long(3));
a1.setName(new Name("先生", "张", "三"));
a1.setHeight(168);
Book book1 = new Book();
book1.setId(new Long(4));
book1.setKeywords(new String[] { "贪污", "低俗" });
c.set(2000, 04, 1);
book1.setPublishDate(c.getTime());
book1.setTitle("社会主义的悲哀");
book1.setSummary("测试");
book1.setMoney(100);
a1.addBook(book1);
session.save(book1);
Book book2 = new Book();
book2.setId(new Long(5));
book2.setKeywords(new String[] { "测试1", "测试2" });
c.set(2005, 03, 1);
book2.setPublishDate(c.getTime());
book2.setTitle("测试");
book2.setSummary("查出");
book2.setMoney(50);
a1.addBook(book2);
session.save(book2);
Book book3 = new Book();
book3.setId(new Long(1));
book3.setKeywords(new String[] { "许宗衡", "官场" });
c.set(2008, 03, 1);
book3.setPublishDate(c.getTime());
book3.setTitle("悲剧");
book3.setSummary("贪污受贿案");
book3.setMoney(300);
a1.addBook(book3);
session.save(book3);
c.set(2010, 03, 1);
Article at1 = new Article();
at1.setKeywords(new String[] { "贪污", "受贿" });
at1.setContent("河北省李四贪污");
at1.setSummary("李四贪污");
at1.setPublishDate(c.getTime());
at1.setTitle("李四贪污被抓");
Article at2 = new Article();
at2.setKeywords(new String[] { "aa", "bb" });
at2.setContent("cc");
at2.setSummary("dd");
at2.setPublishDate(c.getTime());
at2.setTitle("ee");
List<Article> articles = new ArrayList<Article>();
articles.add(at1);
articles.add(at2);
a1.setArticles(articles);
session.save(a1);
compassTransaction.commit();
session.close();
}
public static void reTreive() {
CompassConfiguration config = new CompassConfiguration().configure(
"/org/compass/sample/library/compass.cfg.xml").addClass(
Author.class).addClass(Article.class).addClass(Book.class);
Compass compass = config.buildCompass();
Calendar c = Calendar.getInstance();
Calendar c1 = Calendar.getInstance();
CompassSearchSession session = compass.openSearchSession();
CompassHits hits = session.find("贪污");
c.set(2019, 1, 1);
c1.set(1990, 12, 1);
CompassQueryBuilder compassQueryBuilder = session.queryBuilder();
CompassQuery allpropertyQuery = compassQueryBuilder.queryString(
"贪污").toQuery();
CompassQuery cquery = compassQueryBuilder.between("author.height", 30,
1000, true);
System.out.println("->" + cquery.toString());
CompassBooleanQueryBuilder CQB = compassQueryBuilder.bool().addMust(
cquery).addMust(allpropertyQuery);
System.out.println(CQB.toQuery().toString());
// CompassHits hitsc = compassQueryBuilder.bool().addMust(
// cquery).toQuery().hits();
//
// CompassQuery dateRangeQuery = compassQueryBuilder.between(
// "publishTime", DateFormatUtils.format(start,
// "YYYY-MM-dd"), DateFormatUtils.format(
// end, "YYYY-MM-dd"), true);
CompassHits hitsc = CQB.toQuery().hits();
System.out.println("---->" + hitsc.length());
for (int i = 0; i < hitsc.length(); i++) {
CompassHit hit = hits.hit(i);
if (hit.getAlias().equals("author")) {
Author a = (Author) hit.getData();
System.out.println("" + a.getName());
List<Article> arts = a.getArticles();
for (Article article : arts) {
System.out.println("文章标题=" + article.getTitle());
}
}
if (hit.getAlias().equals("book")) {
Book a = (Book) hit.getData();
System.out.println("" + a.getTitle());
}
}
// int lenth = hits.getLength();
// System.out.println("---->查寻到=" + lenth + "个");
// for (int i = 0; i < lenth; i++) {
// CompassHit hit = hits.hit(i);
// if (hit.getAlias().equals("author")) {
// Author a = (Author) hit.getData();
// System.out.println("" + a.getName());
// List<Article> arts=a.getArticles();
// for (Article article : arts) {
// System.out.println("文章标题="+article.getTitle());
// }
// }
// if (hit.getAlias().equals("book")) {
// Book a = (Book) hit.getData();
// System.out.println("" + a.getTitle());
// }
//
// }
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IndexCreate();
reTreive();
}