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

compass 分页查询

XML 
阅读更多
有了配置文件之后,我们就可以写出相应的增删改查了
public class IndexDao {
//声明配置信息
    private Compass compass ;
  
    public IndexDao(){
       // compass.cfg.xml得到配置信息  默认的配置信息
       CompassConfiguration cfg = new CompassConfiguration().configure();
       compass = cfg.buildCompass();
    }
  
  
//调用方法时候需要传入参数 查询的内容,起始条目数,要显示是条目数
    public QueryResult search(String queryString,int firstResult,int maxReasults){
       //打开session会话
       CompassSession session = compass.openSession();
       //开启session事务
       CompassTransaction tx = session.beginLocalTransaction();
       //用session建立一个查询
       CompassQueryBuilder queryBuilder = session.queryBuilder();
       //得到查询结果
       CompassQuery query = queryBuilder.queryString(queryString).toQuery();
       //按照postTime属性进行排列,默认是升序
//query.addSort(“postTime”,SortDirection.REVERSE);//是降序
       query.addSort("postTime");
       //获得结果集
       CompassHits hits = query.hits();
       //为了防止角标越界,所以在结果集和要取得的内容之间取最小值
       int end = Math.min(hits.length(), firstResult+maxReasults);
       List<Aritcle> list = new ArrayList<Aritcle>();
       for(int i=firstResult;i<end;i++){
           //取得每一个结果
           Aritcle aritcle = (Aritcle) hits.data(i);
         
           //高亮  返回的是高亮后的字符串
           String ht = hits.highlighter(i).fragment("content");
           if(ht!=null){
              aritcle.setContent(ht);
           }
         
           list.add(aritcle);
       }
       tx.commit();
       session.close();
       return new QueryResult(hits.length(),list);
    } 
}
//单字段查询
@SuppressWarnings("unchecked")
    public List<Product> searchProducts(String searchString) {
        Compass compass = compassTemplate.getCompass();
        CompassSession session = compass.openSession();

        List<Product> list = new ArrayList<Product>();
        CompassHits hits = session.queryBuilder().queryString(
                "name:" + searchString).toQuery().hits();
        for (int i = 0; i < hits.getLength(); i++) {
            Product hitProduct = (Product) hits.data(i);
            list.add(hitProduct);
        }
        return list;
    }

//多字段查询

ExpressionHits ThatjackContain the term jack in the default search fieldjack london (jack AND london)Contains the term jack and london in the default search fieldjack OR londonContains the term jack or london, or both, in the default search field+jack +london (jack AND london)Contains both jack and london in the default search fieldname:jackContains the term jack in the name property (meta-data)name:jack -city:london (name:jack AND NOT city:london)Have jack in the name property and don't have london in the city propertyname:"jack london"Contains the exact phrase jack london in the name propertyname:"jack london"~5Contain the term jack and london within five positions of one anotherjack*Contain terms that begin with jackjack~Contains terms that are close to the word jackbirthday:[1870/01/01 TO 1920/01/01]Have the birthday values between the specified values. Note that it is a lexicography range
CompassHits hits = session.createQueryBuilder()  .queryString("+name:jack +familyName:london")    .setAnalyzer("an1") // use a different analyzer  .toQuery()    .addSort("familyName", CompassQuery.SortPropertyType.STRING)    .addSort("birthdate", CompassQuery.SortPropertyType.INT)  .hits();

Another example for building a query that requires the name to be jack, and the familyName not to be london:
CompassQueryBuilder queryBuilder = session.createQueryBuilder();CompassHits hits =  queryBuilder.bool()    .addMust( queryBuilder.term("name", "jack") )    .addMustNot( queryBuilder.term("familyName", "london") )  .toQuery()    .addSort("familyName", CompassQuery.SortPropertyType.STRING)    .addSort("birthdate", CompassQuery.SortPropertyType.INT)  .hits();
定义可搜索的对象,最好使用一个单独的类,专门用户搜索的,只需要定义在搜索结果页面中需要显示的属性。
在类上生命@searchable,说明这个是可以被搜索的类
在有唯一标识作用属性上生命@searchableId,这个必须要有。
在属性(getter)上生命@searchPropetry,并指定store与index策略,还可以指定boost(这个表示要搜索的内容的重要程度,默认是1F)
分享到:
评论

相关推荐

    ssh+compass实现站内搜索分页.rar

    这个方法将接收用户的查询参数,调用Compass提供的API执行搜索,并获取搜索结果。 4. **分页处理**:为了实现分页,你需要在搜索请求中添加页码和每页显示的记录数。然后,使用Compass的API获取相应范围的搜索结果...

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

    在测试和优化阶段,可能会涉及性能调优,如分页查询、索引优化、缓存策略等。此外,为了提供良好的用户体验,还需要考虑如何显示搜索建议、处理模糊匹配、排序结果等。 综上所述,"Spring ,JPA,Compass使用注解开发...

    lucene 搜索引擎 compass

    Lucene的核心功能包括文档的索引和查询。在示例中,`lucene.html`展示了一个简单的HTML表单,用户可以输入关键字进行搜索。当用户点击“提交”按钮时,数据会通过POST方法发送到`search.jsp`页面进行处理。 在`...

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

    你可以使用Compass提供的Gps接口或者自定义查询语句来实现对索引的检索。检索结果可以转换成业务对象,然后传递给视图进行展示。 在实际项目中,可能还需要考虑性能优化,例如使用缓存减少数据库访问,或者对搜索...

    巴巴运动网-产品搜索

    此外,还可以对查询结果进行分页处理,返回特定数量的结果记录,提高搜索效率和响应速度。 综上所述,黎活明老师在传智播客视频中分享的巴巴运动网产品搜索功能实现,不仅涵盖了Lucene和Compass的基础理论知识,还...

    pager:分页器是Cursor的替代品,可在整个过程中提供对数据集合的分页访问

    分页器-游标的一种替代方法,它提供对数据集合的分页访问,可以在一个流程之间共享。 就像游标一样,如果通过绑定程序(AIDL或 )在整个进程之间共享Pager,则实际上只有原始数据的窗口跨绑定程序传输,其余的则在...

    mongodb的工具MongoHub.app.zip

    4. 查询构建器:用户可以利用MongoDB的查询语法构建复杂的查询,支持排序、分页和投影。 5. 更新操作:除了简单的更新外,MongoHub还支持使用MongoDB的更新操作符进行复杂的更新操作。 6. 聚合框架:虽然MongoHub...

    MongoVUE 0.9.7.2 免费免安装版

    MongoVUE 0.9.7.2 是一个专为MongoDB...但是,随着MongoDB功能的不断扩展和复杂性增加,更高级的管理需求可能需要考虑使用其他功能更全面的管理工具,例如MongoDB的官方管理工具MongoDB Compass或其他第三方商业软件。

    mongo图形化工具:rockmongo

    虽然RockMongo是基于PHP的,相比其他如Robo 3T(原名Robomongo)、MongoDB Compass等图形化工具,可能在功能上稍显不足,但其优点在于轻便、开源且跨平台。如果你的项目主要使用PHP,那么RockMongo是一个很好的选择...

    MongoDB使用手册

    虽然MongoDB是非SQL数据库,但它的查询语法与SQL有一定的相似性,支持条件查询、排序、分页和聚合操作。例如,`db.collection.find({key: value})`对应于SQL的`SELECT * FROM collection WHERE key = value`。 **第...

    MongoDB 数据库基本操作与功能详解

    - **分页查询** 使用 `skip` 和 `limit` 方法实现分页。 ```javascript db.students.find().skip(10).limit(10); ``` #### MongoDB 核心功能详解 ##### 1. 高性能 MongoDB 提供高性能的数据持久化和查询能力,...

    mongodb入门教程

    MongoDB的查询语句非常强大,支持条件查询、排序、分页、聚合操作等。例如,使用`$gt`、`$lt`等比较运算符进行范围查询,`$regex`进行正则表达式匹配,`$in`和`$nin`进行数组成员检查。 六、索引 为了提高查询性能...

    Java个人简历模板40.doc

    8. **Lucene和Compass全文搜索引擎**:Lucene是Java的全文搜索引擎库,Compass是基于Lucene的高级搜索框架,用于在应用中实现高效、复杂的全文检索功能。 9. **工作经验**:在秦皇岛市泰信系统工程有限公司的工作...

    自己动手写搜索引擎

    同时还讨论了如何实现搜索结果的排序、过滤和分页等功能,以便更好地展示搜索结果。 #### 五、Lucene的分析器 - 分析器是Lucene中用于处理文本的关键组件之一。本章节重点介绍了Lucene中的各种分析器,包括如何...

    m101js:M101JS

    课程会详细讨论MongoDB的查询语法,包括查询运算符、投影、排序和分页。同时,索引是提升查询性能的关键,M101JS也会涵盖如何创建、管理和优化索引。 **聚合框架** MongoDB的聚合框架允许开发者对数据进行处理,...

    la-pizzeria:LaPizzeria - 网上商店

    LaPizzeria - 网上商店使用 Java 和 XML 的交互式 Web 服务 2015用法我们使用以下凭据创建了一个用于管理目的的测试用户: user: admin@admin.compass: abcdEFG123#该应用程序在 Apache Tomcat 8.0 上进行了测试。...

    dbApi-spring-boot-starter-demo:dbApi-spring-boot-starter案例代码

    - 分页查询:内置分页查询支持,简化复杂查询的编写。 - 自定义SQL:允许开发者编写自定义的SQL或存储过程,满足特殊需求。 - 数据权限控制:可与Spring Security等安全框架集成,实现细粒度的数据权限控制。 五、...

    extjs2.02帮助文档

    4. **Grid控件**:ExtJS的Grid组件是其标志性功能之一,用于展示大量数据并支持排序、分页、过滤等功能。2.0.2版本的Grid已经相当成熟,可以满足复杂的数据展示需求。 5. **Form组件**:ExtJS提供了丰富的表单组件...

Global site tag (gtag.js) - Google Analytics