asdtiang的博客 感谢blogjava提供的博客交流平台

grails searchable highlight显示查询结果

Posted on 2010-12-22 17:46 asdtiang 阅读(718) 评论(0)  编辑  收藏 所属分类: grails study
查不到中文的结果,所以这里记一下
以前用lucene时,还比较好控制,用searchable还不太适应。
def index = {
        
if (!params.q?.trim()) {
            
return [:]
        }

        
try {
            params.withHighlighter
= songHighlighter
            
return [searchResult: searchableService.search(params.q, params)]
        }
 catch (SearchEngineQueryParseException ex) {
            
return [parseException: true]
        }

    }

  
// This closure does the per-hit highlighting
// sr is the actual Map returned by search, so use that for storage
   def songHighlighter = { highlighter, index, sr ->
    
// lazy-init the storage
    if (!sr.highlights) {
        sr.highlights 
= []
    }
   
    
//content为domain的属性
    sr.highlights[index] = highlighter.fragment("content")   
   }
// Do the search, passing he highlighter option

页面更改:
 <g:each var="result" in="${searchResult.results}" status="index">
          
<div class="result">
            
<g:set var="className" value="${ClassUtils.getShortName(result.getClass())}" />
            
<g:set var="link" value="${createLink(controller: className[0].toLowerCase() + className[1..-1], action: 'show', id: result.id)}" />
            
<div class="name"><href="${link}">${result.title}</a></div>

            
<div class="desc">${searchResult.highlights[index]}</div>
            
<div class="displayLink">${link}</div>
          
</div>
        
</g:each>
查询结果示例,直接输出的searchResults

{total=3, hits=org.compass.core.impl.DefaultCompassDetachedHits@4eb331, max=10, scores=[0.34462962, 0.34462962, 0.19071755], results=[asdf, asdf, 中国(拼音:Zhōngguó),是中华人民共和国的简称。古代华夏族建国于黄河流域一带,以为居天下之中,故称。还有一种解释古代中国人认为天圆地方,中国位于正中,故称中国,后成为专称。清朝,作为官方正式称呼,现代主要指中华人民共和国(英译为:The People's Republic of China,简称China)。 陆地面积960万平方千米,东部和南部大陆海岸线1.8万多千米,内海和边海的水域面积约470多万平方千米。海域分布有大小岛屿7600个。首都北京。中国具有五千年的文明史,是世界四大文明古国之一。因其文化传播的广泛性、独特性和成熟性而对周边国家和民族的文化产生深远影响,同时不断吸收各个民族的文明成果,是世界上少数最早产生文明并延续至今的国家之一。 ], offset=0, highlights=[null, null, 国(拼音:Zhōngguó),是华人民共和国的简称。古代华夏族建国于黄河流域一带,以为居天下之,故称。还有一种解释古代国人认为天圆地方,国位于正,故称国,后成为专称。清朝,作为官方正式]}


查询结果高亮显示css为b,
只要在css里加上b{color : red;},就显示为红色了。

从结果可以看出,要了highlights就没有必要要results,信息重复,但each里用了,要下班了,明天研究下吧

刚到公司,想起来了,当时在domain类下重写了toString()方法,不重写results里就没有那么多内容了。



天苍苍,野茫茫,风吹草底见牛羊

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 80, comments - 24, trackbacks - 0, articles - 32

Copyright © asdtiang

asdtiang的博客 PaidMailz
点击广告网赚A(每天4个广告,每个0.0025美元,一个搜索广告0.03美元)