Thanks to a fantastic tip from Karl on yesterday’s post, I’ve got the searchable plugin up and running on my Grails-RC3 install! Here’s the fix from Karl:
i‘ve got a working Searchable-0.4-SNAPSHOT wo. npe, this is working with the RCs too. In the plugin‘s java directory u need to slightly modify the org/codehaus/groovy/grails/plugins/searchable/compass/SearchableCompassUtils.java file. Here is the “patched” version: [http://rafb.net/p/prsZip92.html](http://rafb.net/p/prsZip92.html) (nopaste url)
So I patched my version, and I’m up and running. Getting Gravl converted over was a snack. Basically, I just had to remove all my custom code! And, of course, add the magic static searchable=true to my BlogEntry object.
After I patched the plugin, I ran grails install-searchable-config to get a SearchableConfiguration file in my conf directory. From there I could change the compassConnection setting to point to the place I like to store my indexes.
My search action could then shrink to:
def search = {
def query = params.query
def blogid = params.blog
def results = BlogEntry.search(query, params)
return [ results: results, query: query ]
}
The results you get back in ${results.results} are first class domain objects! So it’s pretty much just a matter of a little markup…
<g:each var="result" in="${results.results}">
<div class='hit'>
<div class='hitEntry'>
<div class='hitTitle'>
<a href='${request.contextPath}/${result.toPermalink()}'>
${result.title}
</a>
</div>
<div class='hitInfo'>
<g:niceDate date="${result.created}"/>
</div>
<p class='hitBody'></p>
</div>
</div>
</g:each>
Add a g:paginate into the mix, and you’re cooking!
One thing I have lost in the conversion is the ability to do hit term highlighting. I know Compass supports it, so it might just be a matter of digging in a little deeper! I’d also like to be able to store some DynamicMetaData with the index (blogEntry.blog.blogid), but haven’t managed to get the annotations working just yet…
Anyways… a huge code saving. Give it a try on the top right. And thanks Karl, you’re a champion!
Happy searching!