Basic Searching

Sie können für die Suche den Mindbreeze Web Client verwenden oder die SDK Schnittstelle, um Suchergebnisse in eine eigene Anwendung einzubetten.

Das Mindbreeze SearchService bietet Zugriff auf Suchresultate, deren Eigenschaften, Facetten und Did you mean-Vorschläge. Selbstverständlich werden die Suchresultate autorisiert und es stehen auch unterschiedliche Methoden zur Authentifizierung bereit. Das Mindbreeze Client Service stellt das SearchService zur Verfügung. Das bedeutet, dass die Konfiguration des Client Service auch die SDK-Schnittstelle beeinflusst.

Das SDK-Beispiel enthält eine JSP-Anwendung, die das SearchService verwendet. Um die Anwendung auszuführen, starten Sie den Apache Tomcat Server in eclipse.

Öffnen Sie in einem Browser die URL http://localhost:8080/search/search.jsp und starten Sie die Suche.

In der Datei search.jsp wird ein SearchRequest aufgebaut, der dann an das SearchService gesendet wird. Ein minimaler SearchRequest kann so aussehen:


QueryExpr query = 
QueryExpr.newBuilder().setKind(QueryExpr.Kind.EXPR_UNPARSED).setUnparsedExpr
("user query").build();
 
SearchRequest searchRequest = SearchRequest.newBuilder()
  .setRankingStrategy(RankingStrategy.RANK)
  .setDetailLimit(DetailLimit.CONTENT)
  .setUserQuery(query)
  .addView(View.newBuilder()
    .setId("view")
    .setCount(10)
    .setRankingStrategy(mindbreeze.query.ViewProtos.View.RankingStrategy.RELEVANCE)
  )
  .build();


Der SearchRequest wird mit SearchServiceClient(<URL des Client Service>).performSearch ausgeführt. Die Methode performSearch liefert als Ergebnis ein SearchResponse-Objekt, das die Resultate, Facetten und Did you mean-Vorschläge enthält.


SearchResponse searchResponse = new SearchServiceClient(endpoint)
  .performSearch(request.getServletContext(), searchRequest);


Für jede bei der Suche definierte View enthält das SearchResponse-Objekt ein ResultSet. Jedes ResultSet enhält Result-Objekten für die Resultate. Die Eigenschaften des Resultats sind mit getPropertyList() zugreifbar. So können Sie den Titel und den Inhalt ausgeben:


ResultSet resultSet = searchResponse.getResultSet(0);
<% for (Result result : resultSet.getResultList()) {%>
  <% Map<String, NamedValue> properties = PropertyHelper.asMap(result.getPropertyList()); %>
  <div class="result">
    <h2><%= PropertyHelper.getSampleText(properties.get("title")) %></h2>
    <p>
      <%= PropertyHelper.getSampleText(properties.get("content")) %>
    </p>
  </div>
<% } %>