读书人

Spring Compass (Lucene) 全文本搜索排

发布时间: 2012-11-10 10:48:50 作者: rapoo

Spring Compass (Lucene) 全文本搜索排序问题

import org.compass.core.Compass;import org.compass.core.CompassHits;import org.compass.core.CompassQuery;import org.compass.core.CompassSession;import org.compass.core.CompassTemplate;import org.compass.core.CompassQuery.SortDirection;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.TokenStream;... public List<Product> searchProducts(String topMenuId, String middleMenuId, String menuId, String brandId,  String searchWord, String orderByColumn) {  Analyzer analyzer = new net.paoding.analysis.analyzer.PaodingAnalyzer();  Reader r = new StringReader(searchWord);  TokenStream ts = (TokenStream) analyzer.tokenStream("", r);  log.debug("=====paoding_analyzer start ====");  Token t;  try {    while ((t = ts.next()) != null) {     log.debug(t.termText());   }  } catch (IOException e) {   e.printStackTrace();  }  log.debug("=====paoding_analyzer end====");  Compass compass = compassTemplate.getCompass();  CompassSession session = compass.openSession();  List<Product> list = new ArrayList<Product>();  StringBuilder sql = new StringBuilder();  sql.append(searchWord);  boolean hasAnd = false;  if (StringUtils.isNotEmpty(menuId)) {    sql.append(hasAnd ? "" : " AND ");    sql.append(" product_menu_id:").append(menuId);    hasAnd = true;  }  if (StringUtils.isNotEmpty(brandId)) {    sql.append(hasAnd ? "" : " AND ");    sql.append(" product_brand_id:").append(brandId);  }  log.debug(sql.toString());  CompassQuery compassQuery = session.queryBuilder().queryString(sql.toString()).toQuery();  //排序部分,SortDirection.AUTO,SortDirection.REVERSE 逆序排序  if (StringUtils.isNotEmpty(orderByColumn)) {    if("click_ratio".equals(orderByColumn)){      compassQuery.addSort( orderByColumn ,         CompassQuery.SortPropertyType.INT,        SortDirection.AUTO);    }else if("saled_amount".equals(orderByColumn)){      compassQuery.addSort( orderByColumn ,         CompassQuery.SortPropertyType.INT,         SortDirection.AUTO);    }else if("web_price".equals(orderByColumn)){      compassQuery.addSort( orderByColumn ,         CompassQuery.SortPropertyType.FLOAT,         SortDirection.AUTO);    }else if("crtdate".equals(orderByColumn)){      compassQuery.addSort( orderByColumn ,         CompassQuery.SortPropertyType.STRING,         SortDirection.AUTO);    }  }  CompassHits hits = compassQuery.hits();  log.debug("hits:" + hits.getLength());  for (int i = 0; i < hits.length(); i++) {    Product p = (Product) hits.data(i);    // p.setName(hits.highlighter(i).fragment("name"));    // p.setBrand(hits.highlighter(i).fragment("brand"));    list.add(p);  }  return list;}... 

读书人网 >编程

热点推荐