Groovy&Grails-插件应用-Searchable Plugin

本文介绍如何在Grails应用中使用searchable插件实现全文检索功能。该插件基于Compass和Lucene构建,适用于Grails 2.3及以上版本。文章详细展示了安装配置步骤及如何创建带有搜索功能的domain类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信息

  • 评级:5星
  • 版本:0.6.5
  • 更新:2013-10-02
  • 适用:Grails2.3 > *

如果想使用Grails2.2 > *,则需要使用0.6.4版本,0.6.5只支持Grails2.3 > *版本

摘要

给Grails中增加全文检索功能,这个插件建立在Compass和Lucene之上。建议Java版本为1.5 > *

安装

<!-- lang:groovy -->
grails install-plugin searchable
or
compile ":searchable:0.6.4"

应用

  • 增加一个domain,并开启search的检索功能

Book.groovy

<!-- lang:groovy -->
package com.example

class Book {

    static Searchable = true

    String title
    Integer pages

    String toString(){
        title
    }

   static constraints = {
   }
}
  • 使用generate-all生成book对象的controller和view代码
  • 在BookController中增加search闭包,根据过滤条件搜索数据

BookController.groovy

<!-- lang:groovy -->
def search = {
    def bookList
    def searchResult
	
    if(params.query) {
        searchResult = Book.search(params.query)
        bookList = searchResult.results
    } else 
        bookList = Book.list()
    render(view:'list',model:[bookList:bookList,searchResult:searchResult,query:params.query])
}
  • 在view中的list.gsp中table标签前面增加一个查询框,用来输入查询条件

list.gsp

<!-- lang:groovy -->
<div class="nav">
    <g:form name="search" action='search'>
        Search:<input type="text" name="query" value="${query}"/>
        <input type="submit" value="Search"/>
    </g:form>
</div>
  • 当使用过滤条件后,查询出来的记录和不带过滤条件查询出来的数据不一样,所以需要重写分页

list.gsp

<!-- lang:groovy -->
<div class="pagination">
    <g:if test="${searchResult}">
        <g:paginate total="${searchResult.total}" params="[query:query]" />
    </g:if>
    <g:else>
        <g:paginate total="${Book.count()}" />
    </g:else>
</div>
  • 使用generate-all生成的BookList实例使用的名称为bookInstance,因为共用了list数据显示,所以需要修改成一致,顺便加点初始化数据

BookController.groovy

<!-- lang:groovy -->
def list(Integer max) {
    if(!Book.list()) {
        new Book(title:'java',pages:234).save()
        new Book(title:'grails',pages:234).save()
        new Book(title:'groovy',pages:234).save()
        new Book(title:'ruby',pages:254).save()
        new Book(title:'.net',pages:433).save()
    }
	
    params.max = Math.min(max ?: 10, 100)
    [bookList: Book.list(params), bookListTotal: Book.count()]
}
  • 页面调用也修改一下

list.gsp

<!-- lang:groovy -->
<g:each in="${bookList}" status="i" var="bookInstance">
    ......
</g:each>

参考

转载于:https://my.oschina.net/65304586/blog/172479

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值