Query query = Query.parse(queryString, getServiceLocator()
.getConfiguration());
NutchBean.LOG.info("query: " + queryString);
// execute the query
Hits hits;
try {
hits = getServiceLocator().getNutchBean().search(query,
start + hitsPerPage, hitsPerDup, dedupField, sort, reverse);
} catch (IOException e) {
NutchBean.LOG.warn("Search Error", e);
hits = new Hits(0, new Hit[0]);
}
NutchBean.LOG.info("total hits: " + hits.getTotal());
// generate xml results
int end = (int) Math.min(hits.getLength(), start + hitsPerPage);
int length = end - start;
Hit[] show = hits.getHits(start, end - start);
HitDetails[] details = getServiceLocator().getNutchBean().getDetails(show);
Summary[] summaries = getServiceLocator().getNutchBean().getSummary(
details, query);
String requestUrl = request.getRequestURL().toString();
String base = requestUrl.substring(0, requestUrl.lastIndexOf('/'));
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = factory.newDocumentBuilder().newDocument();
Element rss = addNode(doc, doc, "rss");
addAttribute(doc, rss, "version", "2.0");
addAttribute(doc, rss, "xmlns:opensearch", (String) NS_MAP
.get("opensearch"));
addAttribute(doc, rss, "xmlns:nutch", (String) NS_MAP.get("nutch"));
Element channel = addNode(doc, rss, "channel");
addNode(doc, channel, "title", "Nutch: " + queryString);
addNode(doc, channel, "description", "Nutch search results for query: "
+ queryString);
addNode(doc, channel, "link", base + "/search.jsp" + "?query=" + urlQuery
+ "&start=" + start + "&hitsPerDup=" + hitsPerDup + params);
addNode(doc, channel, "opensearch", "totalResults", "" + hits.getTotal());
addNode(doc, channel, "opensearch", "startIndex", "" + start);
addNode(doc, channel, "opensearch", "itemsPerPage", "" + hitsPerPage);
addNode(doc, channel, "nutch", "query", queryString);
if ((hits.totalIsExact() && end < hits.getTotal()) // more hits to show
|| (!hits.totalIsExact() && (hits.getLength() > start + hitsPerPage))) {
addNode(doc, channel, "nutch", "nextPage", requestUrl + "?query="
+ urlQuery + "&start=" + end + "&hitsPerDup=" + hitsPerDup + params);
}
if ((!hits.totalIsExact() && (hits.getLength() <= start + hitsPerPage))) {
addNode(doc, channel, "nutch", "showAllHits", requestUrl + "?query="
+ urlQuery + "&hitsPerDup=" + 0 + params);
}
for (int i = 0; i < length; i++) {