fixed problems with GSA api:

- better FS attribute
- highlightning of searched words in title
pull/1/head
Michael Peter Christen 13 years ago
parent 3b19fe7b52
commit 3142e675e8

@ -31,6 +31,7 @@ import net.yacy.cora.services.federated.solr.EmbeddedSolrConnector;
import net.yacy.cora.services.federated.solr.GSAResponseWriter;
import net.yacy.kelondro.logging.Log;
import net.yacy.search.Switchboard;
import net.yacy.search.index.YaCySchema;
import net.yacy.search.query.AccessTracker;
import net.yacy.search.query.SnippetProcess;
@ -104,7 +105,8 @@ public class searchresult {
post.put(CommonParams.ROWS, post.remove("num"));
post.put(CommonParams.ROWS, Math.min(post.getInt(CommonParams.ROWS, 10), (authenticated) ? 5000 : 100));
post.put("hl", "true");
post.put("hl.fl", "text_t,h1,h2");
post.put("hl.fl", YaCySchema.h1_txt.name() + ","+ YaCySchema.h1_txt.name() + ","+ YaCySchema.text_t.name());
post.put("hl.alternateField", YaCySchema.description.name());
post.put("hl.simple.pre", "<b>");
post.put("hl.simple.post", "</b>");
post.put("hl.fragsize", Integer.toString(SnippetProcess.SNIPPET_MAX_LENGTH));

@ -29,6 +29,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import net.yacy.cora.protocol.HeaderFramework;
import net.yacy.peers.operation.yacyVersion;
@ -160,8 +161,9 @@ public class GSAResponseWriter implements QueryResponseWriter {
// write header
writer.write(XML_START);
String query = request.getParams().get("q");
OpensearchResponseWriter.solitaireTag(writer, "TM", Long.toString(System.currentTimeMillis() - start));
OpensearchResponseWriter.solitaireTag(writer, "Q", request.getParams().get("q"));
OpensearchResponseWriter.solitaireTag(writer, "Q", query);
paramTag(writer, "sort", (String) context.get("sort"));
paramTag(writer, "output", "xml_no_dtd");
paramTag(writer, "ie", "UTF-8");
@ -222,7 +224,7 @@ public class GSAResponseWriter implements QueryResponseWriter {
continue;
}
if (YaCySchema.title.name().equals(fieldName)) {
OpensearchResponseWriter.solitaireTag(writer, GSAToken.T.name(), value.stringValue());
OpensearchResponseWriter.solitaireTag(writer, GSAToken.T.name(), highlight(value.stringValue(), query));
texts.add(value.stringValue());
continue;
}
@ -283,4 +285,14 @@ public class GSAResponseWriter implements QueryResponseWriter {
writer.write(value);
writer.write("\"/>"); writer.write(lb);
}
public static String highlight(String text, String query) {
String[] q = query.trim().toLowerCase().replaceAll(Pattern.quote("+"), " ").split(" ");
for (String s: q) {
int p = text.toLowerCase().indexOf(s.toLowerCase());
if (p < 0) continue;
text = text.substring(0, p) + "<b>" + text.substring(p, p + s.length()) + "</b>" + text.substring(p + s.length());
}
return text;
}
}
Loading…
Cancel
Save