--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:template match="/Document">
+<!-- This template uses an efficient, cached filter for the "genre" field".
+ Other query fields are fed directly through an analyzer and so do not need to adhere to
+ traditional Lucene query syntax. Terms within a field are ORed while different fields are ANDed
+ -->
+<FilteredQuery>
+ <Query>
+ <BooleanQuery>
+ <xsl:if test="count(artist)>0">
+ <Clause occurs="must">
+ <TermsQuery fieldName="artist"><xsl:value-of select="artist"/></TermsQuery>
+ </Clause>
+ </xsl:if>
+ <xsl:if test="count(album)>0">
+ <Clause occurs="must">
+ <TermsQuery fieldName="album"><xsl:value-of select="album"/></TermsQuery>
+ </Clause>
+ </xsl:if>
+ <xsl:if test="count(releaseDate)>0">
+ <Clause occurs="must">
+ <TermsQuery fieldName="releaseDate"><xsl:value-of select="releaseDate"/></TermsQuery>
+ </Clause>
+ </xsl:if>
+ </BooleanQuery>
+ </Query>
+ <Filter>
+ <CachedFilter>
+ <!-- Example filter to be cached for fast, repeated use -->
+ <TermsFilter fieldName="genre">
+ <xsl:value-of select="genre"/>
+ </TermsFilter>
+ </CachedFilter>
+ </Filter>
+</FilteredQuery>
+</xsl:template>
+</xsl:stylesheet>
\ No newline at end of file