Posted on 2010-12-22 17:46
asdtiang 阅读(729)
评论(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"><a 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里就没有那么多内容了。
天苍苍,野茫茫,风吹草底见牛羊