On May 25, 2009, at 11:15 AM, Jörg Agatz wrote:
I will use Solitas for solr..

Yay!  Our first customer ;)

At the moment, Solitas present All fields in the Results, but i musst change it and present only some, Like id, name, cat and inStock (exampledocuments)

i think that is the code to post all fields..

<div class="result-document">
 #foreach($fieldname in $doc.fieldNames)
    <p>
      <span class="field-name">$fieldname :</span>
      <span>
      #foreach($value in $doc.getFieldValues($fieldname))
        $value
      #end
      </span>
    </p>
 #end

Right - this is just generic code to show all stored fields from the document (TODO: and really should be adjusted to be fl parameter aware).

Maby someone can explain me how i can change the code to get some field

Sure... first, this page describes the objects you have available in the template (Velocity) context: http://wiki.apache.org/solr/VelocityResponseWriter - you can link off to javadocs from there to see more about what each object provides in terms of getters and such.

There is a $response. From the default browse.vm template, $doc is a single item in an iteration over $response.results

$doc is an org.apache.solr.common.SolrDocument (http://lucene.apache.org/solr/api/org/apache/solr/common/SolrDocument.html )

So from a $doc, you can do this:

  $doc.getFirstValue("name")

getFirstValue is used when it is known to be a single valued field (experiment with the other getters on SolrDocument to see how they work with various fields).

In the custom templates I have been using, I define a macro to make this even easier - you can define it in VM_global_library.vm in conf/ velocity to make it global to all templates:

   #macro(field $f)$!{esc.html($doc.getFirstValue($f))}#end

Now you can use #field("name") instead, making templates much cleaner. The $!{esc.html(...)} bit is there to HTML escape the field value, otherwise it leaves the possibility of malformed rendering or even the possibility of a JavaScript injection vulnerability. The explanation point is a Velocity templating feature to not render anything if the value is null, otherwise it'll literally render "$ {....}" in the output.

Perhaps more than you were asking for, but I wanted to be thorough since this is a feature of Solr I'd like to see get some more, ahem, visibility.

        Erik


Reply via email to