grails searchable highlight显示查询结果

查不到中文的结果,所以这里记一下
以前用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里就没有那么多内容了。



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

你可能感兴趣的:(grails searchable highlight显示查询结果)