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

Reply via email to