`
osacar
  • 浏览: 213128 次
  • 性别: 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;
}
... 


分享到:
评论

相关推荐

    Compass+ lucene 通用代码(脱离数据库)

    本篇将深入探讨如何使用Compass与Lucene这两款强大的开源工具,构建一个独立于数据库的通用全文搜索解决方案。 Compass是一个基于Apache Lucene的全文搜索引擎库,它提供了一种简单的方式来连接到应用程序的数据源...

    Spring ,JPA,Compass使用注解开发的博客站内搜索

    综上所述,"Spring ,JPA,Compass使用注解开发的博客站内搜索"是一个涉及多种技术的综合性项目,涵盖了Java企业级开发的多个方面,包括Spring框架的使用、JPA的对象关系映射、以及Compass的全文搜索。这个项目不仅...

    struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现(无jar包)

    Compass是一款基于Lucene的全文搜索引擎,它使得Java应用能够方便地集成全文搜索功能。Compass提供了对JDBC、Hibernate等数据源的直接支持,可以自动索引数据库中的数据,实现快速检索。 在"struts2+spring2.5+...

    Compass原理深入学习笔记

    Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 全文检索是相对于传统的基于...

    compass-reference.pdf

    Compass是为Java开发人员设计的一个高性能、高灵活性的搜索引擎库,旨在简化在应用中集成全文搜索功能的过程。它基于Lucene构建,提供了丰富的API和高度可定制性,允许开发者以最小的努力实现复杂的数据索引和查询。...

    lib22222

    2. **compass-2.2.0.jar**:Compass是一个基于Lucene的搜索引擎库,用于Java应用。它提供了与ORM框架(如Hibernate)的集成,使得在应用中添加全文搜索功能变得简单。Compass能够自动索引数据库中的对象,并提供高级...

    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