`
osacar
  • 浏览: 209728 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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;
}
... 


分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包11

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包2

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包6

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包5

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包8

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包7

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包9

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包101

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    Java资源包01

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

Global site tag (gtag.js) - Google Analytics