Facetten
Facetten erlauben dem Benutzer die Suchresultate aufgrund der Inhalte des Index einfach zu verfeinern.
Damit indizierte Eigenschaften als Facetten verwendet werden können, muss im CategoryDescriptor für die Eigenschaft das Attribut aggregatable
auf true
gesetzt werden.
Facetten werden im Mindbreeze Client automatisch angezeigt, können aber mit der Option Aggregations deaktiviert werden.
Im Search Service stehen die gleichen Facetten zur Verfügung wie im Client Service. Sie können aber auch beliebige Facetten mit addAggregation
bei einer View
anfordern.
… View.newBuilder() .setId("View") .setCount(10) .addAggregation("name") …
<% for (Aggregation aggregation : resultSet.getAggregationList()) { if (aggregation.getEntryCount() == 0) continue; %> <div class="facet"> <div class="facetName"> <b><%="mes:date".equals(aggregation.getName())? "Datum" : aggregation.getName()%></b> </div> <div class="facetEntries"> <% for (Aggregation.Entry entry : aggregation.getEntryList()) { byte[] queryExpr = entry.getQueryExpr().toByteArray(); String facetQuery = Base64.encodeBase64URLSafeString(queryExpr); %> <div><a href="<%=Nav.self(request, "start", "0")%>&facet=<%=facetQuery%>"><%= entry.getName() %> (<%= entry.getCount() %>)</a></div> <% } %> </div> </div> <% } %>
QueryExpr.And.Builder constraints = QueryExpr.And.newBuilder(); String[] facets = request.getParameterValues("facet"); if (facets != null) { for (String facet : facets) { if (facet.isEmpty()) continue; QueryExpr queryExpr = QueryExpr.newBuilder().mergeFrom(Base64.decodeBase64(facet)).build(); constraints.addExpr(queryExpr); } } if (constraints.getExprCount() > 0) { searchRequest.setQueryConstraints(QueryExpr.newBuilder() .setKind(QueryExpr.Kind.EXPR_AND) .setAndExpr(constraints) ); }