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)?

Reply via email to