Re: Autocompletion with Solritas
Hi Erik, On Jun 18, 2010, at 6:58pm, Erik Hatcher wrote: Have a look at suggest.vm - the name field is used in there too. Just those two places, layout.vm and suggest.vm. That was the missing change I needed. Thanks much! -- Ken And I had already added a ## TODO in my local suggest.vm: ## TODO: make this more generic, maybe look at the request terms.fl? or just take the first terms field in the response? And also, ideally, there'd be a /suggest handler mapped with the field name specified there. I simply used what was already available to put suggest in there easily. Erik On Jun 18, 2010, at 7:54 PM, Ken Krugler wrote: Hi Erik, On Jun 17, 2010, at 8:34pm, Erik Hatcher wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/ browse - type in search box. Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Let's say, just for grins, that a different field (besides name) is being used for autocompletion. What would be all the places I'd need to hit to change the field, besides the terms.fl value in layout.vm? For example, what about browse.vm: $(input[type=text]).autoSuggest(/solr/suggest, {selectedItemProp: name, searchObjProps: name}}); I'm asking because I'm trying to use this latest support with an index that uses product_name for the auto-complete field, and I'm not getting any auto-completes happening. I see from the Solr logs that requests being made to /solr/terms during auto-complete that look like: INFO: [] webapp=/solr path=/terms params = {limit = 10 timestamp = 1276903135595 terms .fl = product_name q = rug wt=velocityterms.sort=countv.template=suggestterms.prefix=rug} status=0 QTime=0 Which I'd expect to work, but don't seem to be generating any results. What's odd is that if I try curling the same thing: curl -v http://localhost:8983/solr/terms?limit=10timestamp=1276903135595terms.fl=product_nameq=rugwt=velocityterms.sort=countv.template=suggestterms.prefix=rug I get an empty HTML response: Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: Jetty(6.1.22) If I just use what I'd consider to be the minimum set of parameters: curl -v http://localhost:8983/solr/terms?limit=10terms.fl=product_nameq=rugterms.sort=countterms.prefix=rug Then I get the expected XML response: Content-Type: text/xml; charset=utf-8 Content-Length: 225 Server: Jetty(6.1.22) ?xml version=1.0 encoding=UTF-8? response lst name=responseHeaderint name=status0/intint name=QTime0/int/lstlst name=termslst name=product_nameint name=rug7/int/lst/lst /response Any ideas what I'm doing wrong? Thanks, -- Ken On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Re: Autocompletion with Solritas
Hi, here is my solution. It has been some time since I last looked at it, but it works fine. :-) script type=text/javascript src=/solr/epg/admin/file?file=/velocity/jquery-1.4.min.jscontentType=text/javascript/script script type=text/javascript src=/solr/epg/admin/file?file=/velocity/jquery-ui.jscontentType=text/javascript/script script type=text/javascript src=/solr/epg/admin/file?file=/velocity/jquery.autocomplete.jscontentType=text/javascript/script link rel=stylesheet type=text/css href=/solr/epg/admin/file?file=/velocity/jquery.autocomplete.csscontentType=text/css/ script type=text/javascript src=/solr/epg/admin/file?file=/velocity/jquery.json-2.2.min.jscontentType=text/javascript/script $(function() { $(#qterm).autocomplete('/solr/epg/suggest', { extraParams: { 'terms.prefix': function() { return $(#qterm).val(); } }, hightlight: false, max: 30, formatItem: function(row, i, n) { return row; }, parse: function(data) { var json = jQuery.secureEvalJSON(data); var terms = json.terms; var suggMap = terms[1]; var suggest = []; var j = 0; for (i=0; isuggMap.length; i=i+2) { suggest[j] = { data: suggMap[i], value: suggMap[i], result: suggMap[i] } j = j+1; } return suggest; } }); }); #qterm is the form's input text field. in solrconfig.xml: requestHandler name=/suggest class=solr.SearchHandler lst name=defaults str name=echoParamsexplicit/str bool name=termstrue/bool bool name=terms.lower.inclfalse/bool str name=wtjson/str str name=terms.flsuggestsrc/str /lst arr name=components strterms/str /arr /requestHandler suggestsrc is of type solr.TextField, accumulated from different source fields. Cheers, Chantal
Re: Autocompletion with Solritas
Yup, that's basically what I've done too, here's the script part: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/velocity/layout.vm?view=markup I didn't touch the example solrconfig, though putting the params in the request handler is the better way, as you have. Erik On Jun 18, 2010, at 3:32 AM, Chantal Ackermann wrote: Hi, here is my solution. It has been some time since I last looked at it, but it works fine. :-) script type=text/javascript src=/solr/epg/admin/file?file=/velocity/ jquery-1.4.min.jscontentType=text/javascript/script script type=text/javascript src=/solr/epg/admin/file?file=/velocity/jquery- ui.jscontentType=text/javascript/script script type=text/javascript src=/solr/epg/admin/file?file=/velocity/ jquery.autocomplete.jscontentType=text/javascript/script link rel=stylesheet type=text/css href=/solr/epg/admin/file?file=/velocity/ jquery.autocomplete.csscontentType=text/css/ script type=text/javascript src=/solr/epg/admin/file?file=/velocity/ jquery.json-2.2.min.jscontentType=text/javascript/script $(function() { $(#qterm).autocomplete('/solr/epg/suggest', { extraParams: { 'terms.prefix': function() { return $(#qterm).val(); } }, hightlight: false, max: 30, formatItem: function(row, i, n) { return row; }, parse: function(data) { var json = jQuery.secureEvalJSON(data); var terms = json.terms; var suggMap = terms[1]; var suggest = []; var j = 0; for (i=0; isuggMap.length; i=i+2) { suggest[j] = { data: suggMap[i], value: suggMap[i], result: suggMap[i] } j = j+1; } return suggest; } }); }); #qterm is the form's input text field. in solrconfig.xml: requestHandler name=/suggest class=solr.SearchHandler lst name=defaults str name=echoParamsexplicit/str bool name=termstrue/bool bool name=terms.lower.inclfalse/bool str name=wtjson/str str name=terms.flsuggestsrc/str /lst arr name=components strterms/str /arr /requestHandler suggestsrc is of type solr.TextField, accumulated from different source fields. Cheers, Chantal
Re: Autocompletion with Solritas
Looks like a typo below, Chantal, and another comment below too... On Jun 18, 2010, at 3:32 AM, Chantal Ackermann wrote: $(function() { $(#qterm).autocomplete('/solr/epg/suggest', { extraParams: { 'terms.prefix': function() { return $(#qterm).val(); } }, hightlight: false, hightlight? highlight :) parse: function(data) { var json = jQuery.secureEvalJSON(data); var terms = json.terms; var suggMap = terms[1]; var suggest = []; var j = 0; for (i=0; isuggMap.length; i=i+2) { suggest[j] = { data: suggMap[i], value: suggMap[i], result: suggMap[i] } j = j+1; } This is one of the beauties of the VelocityResponseWriter, freeing the client from having to deal with a Solr data structure. In my work, I did this: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/velocity/suggest.vm?view=markup This makes a terms component request like http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest return exactly what the suggest component likes natively, suggestions textually one per line: ipod in Erik
Re: Autocompletion with Solritas
Hi Erik, thanks so much for your feedback! hightlight? highlight :) ups... Seems that this parameter is false by default, though. At least it never complained. *g* This is one of the beauties of the VelocityResponseWriter, freeing the client from having to deal with a Solr data structure. In my work, I did this: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/velocity/suggest.vm?view=markup This makes a terms component request like http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest return exactly what the suggest component likes natively, suggestions textually one per line: ipod in Erik I am beginning to understand what you mean. I haven't had a look at your suggest template, so far. But I definitely will. Thanks again! Chantal
Re: Autocompletion with Solritas
On Jun 17, 2010, at 8:34pm, Erik Hatcher wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. That works - excellent! Now I'm trying to build a distribution from trunk that I can use for prototyping, and noticed a few things... 1. From a fresh check-out, you can't build from the trunk/solr sub-dir due to dependencies on Lucene classes. Once you've done a top-level ant compile then you can cd into /solr and do ant builds. 2. I noticed the run-example target in trunk/solr/build.xml doesn't have a description, so it doesn't show up with ant -p. 3. I tried ant create-package from trunk/solr, and got this error near the end: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/common-build.xml: 252: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/contrib/velocity/ src not found. I don't see contrib/velocity anywhere in the Lucene trunk tree. What's the recommended way to build a Solr distribution from trunk? In the meantime I'll just use example/start.jar with solr.solr.home and solr.data.dir system properties. Thanks, -- Ken Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Cool?! I think so! :) Erik On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken http://ken-blog.krugler.org +1 530-265-2225 Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Re: Autocompletion with Solritas
On Jun 18, 2010, at 2:56 PM, Ken Krugler wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. That works - excellent! Now I'm trying to build a distribution from trunk that I can use for prototyping, and noticed a few things... 1. From a fresh check-out, you can't build from the trunk/solr sub- dir due to dependencies on Lucene classes. Once you've done a top- level ant compile then you can cd into /solr and do ant builds. sigh. Hopefully we'll shake these things out better over time. This is just one of the growing pains of the lucene/solr merge. 2. I noticed the run-example target in trunk/solr/build.xml doesn't have a description, so it doesn't show up with ant -p. Fixed. It was/is at least documented in the usage (just type ant). 3. I tried ant create-package from trunk/solr, and got this error near the end: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/common-build.xml: 252: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/contrib/ velocity/src not found. I don't see contrib/velocity anywhere in the Lucene trunk tree. Ok, I'm looking into this and will clean it up. Darn you maven! What's the recommended way to build a Solr distribution from trunk? Good question. Anyone...? :) You've done it as I have, sorry for the too brief instructions earlier - I have run ant compile from the top, but didn't realize it was necessary first. Erik
Re: Autocompletion with Solritas
On Jun 18, 2010, at 2:56 PM, Ken Krugler wrote: 3. I tried ant create-package from trunk/solr, and got this error near the end: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/common-build.xml: 252: /Users/kenkrugler/svn/lucene/lucene-trunk/solr/contrib/ velocity/src not found. I don't see contrib/velocity anywhere in the Lucene trunk tree. I've removed the velocity cruft that was left in the build for mavenization. But I personally can't get create-package to run successfully locally, it ends with this: create-package: [delete] Deleting: /Users/erikhatcher/dev/solucene/solr/dist/ apache-solr-4.0-dev.tgz [tar] Building tar: /Users/erikhatcher/dev/solucene/solr/dist/ apache-solr-4.0-dev.tgz BUILD FAILED /Users/erikhatcher/dev/solucene/solr/build.xml:715: Problem creating TAR: Input/output error Anyone else experience that? Or have it run successfully? Erik
Re: Autocompletion with Solritas
Hi Erik, On Jun 17, 2010, at 8:34pm, Erik Hatcher wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Let's say, just for grins, that a different field (besides name) is being used for autocompletion. What would be all the places I'd need to hit to change the field, besides the terms.fl value in layout.vm? For example, what about browse.vm: $(input[type=text]).autoSuggest(/solr/suggest, {selectedItemProp: name, searchObjProps: name}}); I'm asking because I'm trying to use this latest support with an index that uses product_name for the auto-complete field, and I'm not getting any auto-completes happening. I see from the Solr logs that requests being made to /solr/terms during auto-complete that look like: INFO: [] webapp=/solr path=/terms params = {limit = 10 timestamp = 1276903135595 terms .fl = product_name q =rugwt=velocityterms.sort=countv.template=suggestterms.prefix=rug} status=0 QTime=0 Which I'd expect to work, but don't seem to be generating any results. What's odd is that if I try curling the same thing: curl -v http://localhost:8983/solr/terms?limit=10timestamp=1276903135595terms.fl=product_nameq=rugwt=velocityterms.sort=countv.template=suggestterms.prefix=rug I get an empty HTML response: Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: Jetty(6.1.22) If I just use what I'd consider to be the minimum set of parameters: curl -v http://localhost:8983/solr/terms?limit=10terms.fl=product_nameq=rugterms.sort=countterms.prefix=rug Then I get the expected XML response: Content-Type: text/xml; charset=utf-8 Content-Length: 225 Server: Jetty(6.1.22) ?xml version=1.0 encoding=UTF-8? response lst name=responseHeaderint name=status0/intint name=QTime0/int/lstlst name=termslst name=product_nameint name=rug7/int/lst/lst /response Any ideas what I'm doing wrong? Thanks, -- Ken On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Re: Autocompletion with Solritas
Have a look at suggest.vm - the name field is used in there too. Just those two places, layout.vm and suggest.vm. And I had already added a ## TODO in my local suggest.vm: ## TODO: make this more generic, maybe look at the request terms.fl? or just take the first terms field in the response? And also, ideally, there'd be a /suggest handler mapped with the field name specified there. I simply used what was already available to put suggest in there easily. Erik On Jun 18, 2010, at 7:54 PM, Ken Krugler wrote: Hi Erik, On Jun 17, 2010, at 8:34pm, Erik Hatcher wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Let's say, just for grins, that a different field (besides name) is being used for autocompletion. What would be all the places I'd need to hit to change the field, besides the terms.fl value in layout.vm? For example, what about browse.vm: $(input[type=text]).autoSuggest(/solr/suggest, {selectedItemProp: name, searchObjProps: name}}); I'm asking because I'm trying to use this latest support with an index that uses product_name for the auto-complete field, and I'm not getting any auto-completes happening. I see from the Solr logs that requests being made to /solr/terms during auto-complete that look like: INFO: [] webapp=/solr path=/terms params = {limit = 10 timestamp = 1276903135595 terms .fl = product_name q = rug wt=velocityterms.sort=countv.template=suggestterms.prefix=rug} status=0 QTime=0 Which I'd expect to work, but don't seem to be generating any results. What's odd is that if I try curling the same thing: curl -v http://localhost:8983/solr/terms?limit=10timestamp=1276903135595terms.fl=product_nameq=rugwt=velocityterms.sort=countv.template=suggestterms.prefix=rug I get an empty HTML response: Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: Jetty(6.1.22) If I just use what I'd consider to be the minimum set of parameters: curl -v http://localhost:8983/solr/terms?limit=10terms.fl=product_nameq=rugterms.sort=countterms.prefix=rug Then I get the expected XML response: Content-Type: text/xml; charset=utf-8 Content-Length: 225 Server: Jetty(6.1.22) ?xml version=1.0 encoding=UTF-8? response lst name=responseHeaderint name=status0/intint name=QTime0/int/lstlst name=termslst name=product_nameint name=rug7/int/lst/lst /response Any ideas what I'm doing wrong? Thanks, -- Ken On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Autocompletion with Solritas
I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Re: Autocompletion with Solritas
Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Cool?! I think so! :) Erik On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g
Re: Autocompletion with Solritas
You, sir, are on my Christmas card list. I'll fire it up tomorrow morning let you know how it goes. -- Ken On Jun 17, 2010, at 8:34pm, Erik Hatcher wrote: Your wish is my command. Check out trunk, fire up Solr (ant run- example), index example data, hit http://localhost:8983/solr/browse - type in search box. Just used jQuery's autocomplete plugin and the terms component for now, on the name field. Quite simple to plug in, actually. Check the commit diff. The main magic is doing this: http://localhost:8983/solr/terms?terms.fl=nameterms.prefix=iterms.sort=countwt=velocityv.template=suggest Stupidly, though, jQuery's autocomplete seems to be hardcoded to send a q parameter, but I coded it to also send the same value as terms.prefix - but this could be an issue if hitting a different request handler where q is used for the actual query for filtering terms on. Cool?! I think so! :) Erik On Jun 17, 2010, at 8:03 PM, Ken Krugler wrote: I don't believe Solritas supports autocompletion out of the box. So I'm wondering if anybody has experience using the LucidWorks distro Solritas, plus the AJAX Solr auto-complete widget. I realize that AJAX Solr's autocomplete support is mostly just leveraging the jQuery Autocomplete plugin, and hooking it up to Solr facets, but I was curious if there were any tricks or traps in getting it all to work. Thanks, -- Ken Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g Ken Krugler +1 530-210-6378 http://bixolabs.com e l a s t i c w e b m i n i n g