On Feb 2, 2012, at 11:17 , Yuhao wrote: > Erik, > > You were right! The space in "Entrez ID" was the problem. It works fine > after I got rid of all spaces and capital letters. > Now I just have to come up with a way to display the original field names in > the UI, which the users would prefer. > Is there a way I can stick the display value (with spaces and capital > letters) in the schema (or somewhere else) and pull it out at showtime?
Sure... either encode a HashMap or something like that in the template or put arbitrary parameters into your request handler configuration and pull them out as needed from the params. Like "title" in the example below. Erik > > Thanks. > > > > ________________________________ > From: Erik Hatcher <erik.hatc...@gmail.com> > To: solr-user@lucene.apache.org > Sent: Thursday, February 2, 2012 10:32 AM > Subject: Re: Help: Creating another handler and template to display document > attributes > > There should only be one document matching that query (provided "Entrez ID" > is your unique key field name). Using a space in a field name is perhaps the > problem. It's way best practice that fields have only [a-zA-z0-9_] in them. > Maybe that space isn't the issue though, but try &debugQuery=true and see how > the query parsed to see for sure. > > Erik > > > On Feb 2, 2012, at 10:22 , Yuhao wrote: > >> Erik, >> >> Thanks for the slides. I followed the example on pages 24-25 (maybe too >> rigidly). The first line is giving me trouble: >> >> #set($doc= $response.results.get(0)) >> >> This will always get the first document in the search results, which happens >> to be the first document I indexed. So, no matter which record I click on, >> I'm always taken to the details of that first record. I can't get to any >> other record even though I pass their ID to the new handler. So, my >> question is, is the line above supposed to give me the record I passed the >> ID for, or is it just an example to get "some" record? >> >> Here are the details of my implementation: >> (I realize I've got a space in the ID field "Entrez ID". However, that >> doesn't seem to be the problem since it was able to get the first record) >> >> I defined a SearchHandler named "/details". Example url: >> http://localhost:920/solr/details?id=7391 >> >> >> schema.xml: >> ================================================ >> <requestHandler name="/details" class="solr.SearchHandler"> >> <lst name="defaults"> >> <!-- VelocityResponseWriter settings --> >> <str name="wt">velocity</str> >> >> <str name="v.template">details</str> >> <str name="v.template.header">__this is configured in >> solrconfig.xml, str name="v.template.header"__</str> >> <str name="v.layout">layout</str> >> <str name="title">Details</str> >> >> <str name="q">{!raw f="Entrez ID" v=$id}</str> >> >> <str name="facet">on</str> >> <str name="facet.limit">10</str> >> <str name="facet.sort">count</str> >> <str name="facet.field">Gene_Ontology_Associations</str> >> <str name="facet.field">Mouse_Phenotype_Associations</str> >> <str name="facet.field">BKL_Diagnostic_Marker_Associations</str> >> <str name="facet.field">BKL_Molecular_Mechanism_Associations</str> >> <str name="facet.field">BKL_Therapeutic_Target_Associations</str> >> <str name="facet.field">BKL_Negative_Correlation_Associations</str> >> <str name="facet.field">GAD_Positive_Disease_Associations</str> >> <str name="facet.field">GAD_Negative_Disease_Associations</str> >> <str name="facet.field">HuGENet_GeneProspector_Associations</str> >> <str name="facet.field">Expression_Specificity_according_to_GNF</str> >> <str name="facet.field">OMIM_Clinical_Synopses_Matches</str> >> <str name="facet.field">OMIM_Full_Text_Matches</str> >> <str name="facet.mincount">1</str> >> >> <!-- Highlighting defaults --> >> <str name="hl">on</str> >> <str name="hl.fl">text features name</str> >> <str name="f.name.hl.fragsize">0</str> >> <str name="f.name.hl.alternateField">name</str> >> </lst> >> <arr name="last-components"> >> <str>spellcheck</str> >> </arr> >> <!-- >> <str name="url-scheme">httpx</str> >> --> >> </requestHandler> >> >> >> >> details.vm >> ============================================= >> #set($doc= $response.results.get(0)) >> <span><a href="$doc.getFieldValue('Entrez ID')">$doc.getFieldValue('Entrez >> ID')</a></span> >> <table> >> #foreach($fieldname in $doc.fieldNames) >> <tr> >> <td>$fieldname:</td> >> <td> >> #foreach($value in $doc.getFieldValues($fieldname)) >> $esc.html($value) >> #end >> </td> >> </tr> >> #end >> </table> >> >> >> >> >> ________________________________ >> From: Erik Hatcher <erik.hatc...@gmail.com> >> To: solr-user@lucene.apache.org >> Sent: Wednesday, February 1, 2012 8:26 PM >> Subject: Re: Help: Creating another handler and template to display document >> attributes >> >> I'm not following exactly what you're after here in detail, but I think this >> will help: >> >> >> <http://www.slideshare.net/erikhatcher/rapid-prototyping-with-solr-5675936> >> >> See slides 24 and 25. Note the use of $id in the /document request handler >> definition using parameter substitution, a really cool technique. >> >> Erik >> >> On Feb 1, 2012, at 17:17 , Yuhao wrote: >> >>> Like the title says, I want to create a "page" to display a bunch of >>> document attributes. I accomplished this by creating a new handler and a >>> template for it. However, I'm having trouble pulling up the details of the >>> document in the new handler. Here's my code. Is this a good way to do it? >>> I first pass the doc ID to the handler, which I then use to pull up the >>> details. >>> >>> >>> ********************************* BEGIN ******************************* >>> #set($id = $params.get("id")) >>> ## Note: id is the same thing as "Entrez ID" >>> >>> >>> #foreach ($doc in $response.results) >>> #if ($doc.getFieldValue('Entrez ID') == $id) ## Only show attrs for the >>> current doc >>> #foreach ($field_name in $doc.getFieldNames()) >>> <b>$field_name</b>: $doc.getFieldValue($field_name)<br/><br/> >>> #end >>> #end >>> #end >>> ********************************* END ******************************* >>> >>> >>> This approach requires the document to be in the search results. The way I >>> pass the ID to the handler right now, is to simply add "id=$id" to the URL, >>> without the rest of the querystring that was used to conceive the current >>> query. I need to get the rest of the querystring and pass them along to >>> the handler to ensure the document is in the search result. However, I >>> don't know of a good way. I tried the following code: >>> >>> #set($querystring = "") >>> #foreach ($param in $request.params.getParameterNamesIterator()) >>> #set($querystring = $querystring + >>> "&$param=$esc.url($request.params.get($param))" ) >>> #end >>> >>> >>> Unfortunately, the above code returns a lot of unnecessary params that are >>> not part of the querystring, and it fails to put the document in the search >>> result. Is there a better way to get the URL querystring (and just the >>> querystring, not other environment parameters)?