*) followed some suggestions by PMD

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6970 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
low012 15 years ago
parent 2d263a7157
commit 0e6fed1fb6

@ -141,6 +141,8 @@
:: ::
#%env/templates/embeddedfooter.template%# #%env/templates/embeddedfooter.template%#
#(/display)# #(/display)#
<img src="cytag.png?icon=invisible&amp;nick=yacyh_#[clientid]#&amp;tag=search" /> <p>
<img src="cytag.png?icon=invisible&amp;nick=yacyh_#[clientid]#&amp;tag=search" alt=""/>
</p>
</body> </body>
</html> </html>

@ -11,15 +11,19 @@
<script type="text/javascript" src="/js/yacysearch.js"></script> <script type="text/javascript" src="/js/yacysearch.js"></script>
<script type="text/javascript" src="/js/highslide/highslide.js"></script> <script type="text/javascript" src="/js/highslide/highslide.js"></script>
<script type="text/javascript">hs.outlineType = 'rounded-white';</script> <script type="text/javascript">hs.outlineType = 'rounded-white';</script>
#(display)#
<script src="/yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
::
#(/display)#
</head> </head>
<body id="yacysearch"> <body id="yacysearch">
#(display)# #(display)#
#%env/templates/simpleheader.template%# #%env/templates/simpleheader.template%#
<script src="/yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
:: ::
<div id="api"> <div id="api">
<script type="text/javascript"> <script type="text/javascript">
@ -155,7 +159,7 @@ var progressbar = new Progressbar(#[results]#, document.getElementById("results"
#(/geoinfo)# #(/geoinfo)#
<!-- linklist begin --> <!-- linklist begin -->
#(resultTable)#::<table width="100%"><tr class="TableHeader"><td width="30%">Media</td><td width="70%">URL</tr>#(/resultTable)# #(resultTable)#::<table width="100%"><tr class="TableHeader"><td width="30%">Media</td><td width="70%">URL</td></tr>#(/resultTable)#
#{results}# #{results}#
<!--#include virtual="yacysearchitem.html?item=#[item]#&eventID=#[eventID]#&display=#[display]#" --> <!--#include virtual="yacysearchitem.html?item=#[item]#&eventID=#[eventID]#&display=#[display]#" -->
#{/results}# #{/results}#
@ -167,6 +171,6 @@ var progressbar = new Progressbar(#[results]#, document.getElementById("results"
<!-- div style="width=220px;" --> <!-- div style="width=220px;" -->
<!--#include virtual="yacysearchtrailer.html?eventID=#[eventID]#&display=#[display]#" --> <!--#include virtual="yacysearchtrailer.html?eventID=#[eventID]#&display=#[display]#" -->
<!-- /div --> <!-- /div -->
<!-- /div --> </div>
</body> </body>
</html> </html>

@ -98,12 +98,13 @@ public final class QueryParams {
public boolean specialRights; // is true if the user has a special authorization and my use more database-extensive options public boolean specialRights; // is true if the user has a special authorization and my use more database-extensive options
public QueryParams(final String queryString, public QueryParams(final String queryString,
final int itemsPerPage, final int itemsPerPage,
final Bitfield constraint, final Bitfield constraint,
final Segment indexSegment, final Segment indexSegment,
final RankingProfile ranking) { final RankingProfile ranking) {
if ((queryString.length() == 12) && (Base64Order.enhancedCoder.wellformed(queryString.getBytes()))) { if ((queryString.length() == 12) && (Base64Order.enhancedCoder.wellformed(queryString.getBytes()))) {
this.queryString = null; this.queryString = null;
this.queryHashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0); this.queryHashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0);
this.excludeHashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0); this.excludeHashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0);
try { try {
@ -146,8 +147,8 @@ public final class QueryParams {
} }
public QueryParams( public QueryParams(
final String queryString, final HandleSet queryHashes, final String queryString, final HandleSet queryHashes,
final HandleSet excludeHashes, final HandleSet excludeHashes,
final HandleSet fullqueryHashes, final HandleSet fullqueryHashes,
final String tenant, final String tenant,
final int maxDistance, final String prefer, final ContentDomain contentdom, final int maxDistance, final String prefer, final ContentDomain contentdom,
@ -164,35 +165,36 @@ public final class QueryParams {
final boolean specialRights, final boolean specialRights,
final Segment indexSegment, final Segment indexSegment,
final RankingProfile ranking) { final RankingProfile ranking) {
this.queryString = queryString;
this.queryHashes = queryHashes; this.queryString = queryString;
this.excludeHashes = excludeHashes; this.queryHashes = queryHashes;
this.fullqueryHashes = fullqueryHashes; this.excludeHashes = excludeHashes;
this.tenant = (tenant != null && tenant.length() == 0) ? null : tenant; this.fullqueryHashes = fullqueryHashes;
this.ranking = ranking; this.tenant = (tenant != null && tenant.length() == 0) ? null : tenant;
this.maxDistance = maxDistance; this.ranking = ranking;
this.contentdom = contentdom; this.maxDistance = maxDistance;
this.itemsPerPage = Math.min((specialRights) ? 1000 : 100, itemsPerPage); this.contentdom = contentdom;
this.offset = Math.min((specialRights) ? 10000 : 1000, offset); this.itemsPerPage = Math.min((specialRights) ? 1000 : 100, itemsPerPage);
this.urlMask = Pattern.compile(urlMask); this.offset = Math.min((specialRights) ? 10000 : 1000, offset);
this.urlMask = Pattern.compile(urlMask);
this.urlMask_isCatchall = this.urlMask.toString().equals(catchall_pattern.toString()); this.urlMask_isCatchall = this.urlMask.toString().equals(catchall_pattern.toString());
this.prefer = Pattern.compile(prefer); this.prefer = Pattern.compile(prefer);
this.prefer_isMatchnothing = this.prefer.toString().equals(matchnothing_pattern.toString());; this.prefer_isMatchnothing = this.prefer.toString().equals(matchnothing_pattern.toString());
assert language != null; assert language != null;
this.targetlang = language; this.targetlang = language;
this.navigators = navigators; this.navigators = navigators;
this.domType = domType; this.domType = domType;
this.zonecode = domainzone; this.zonecode = domainzone;
this.domMaxTargets = domMaxTargets; this.domMaxTargets = domMaxTargets;
this.constraint = constraint; this.constraint = constraint;
this.allofconstraint = allofconstraint; this.allofconstraint = allofconstraint;
this.sitehash = site; assert site == null || site.length() == 6; this.sitehash = site; assert site == null || site.length() == 6;
this.authorhash = authorhash; assert authorhash == null || authorhash.length() > 0; this.authorhash = authorhash; assert authorhash == null || authorhash.length() > 0;
this.snippetCacheStrategy = snippetCacheStrategy; this.snippetCacheStrategy = snippetCacheStrategy;
this.host = host; this.host = host;
this.remotepeer = null; this.remotepeer = null;
this.handle = Long.valueOf(System.currentTimeMillis()); this.handle = Long.valueOf(System.currentTimeMillis());
this.specialRights = specialRights; this.specialRights = specialRights;
this.indexSegment = indexSegment; this.indexSegment = indexSegment;
} }
@ -228,22 +230,24 @@ public final class QueryParams {
public static HandleSet hashes2Set(final String query) { public static HandleSet hashes2Set(final String query) {
final HandleSet keyhashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0); final HandleSet keyhashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0);
if (query == null) return keyhashes; if (query != null) {
for (int i = 0; i < (query.length() / Word.commonHashLength); i++) try { for (int i = 0; i < (query.length() / Word.commonHashLength); i++) try {
keyhashes.put(query.substring(i * Word.commonHashLength, (i + 1) * Word.commonHashLength).getBytes()); keyhashes.put(query.substring(i * Word.commonHashLength, (i + 1) * Word.commonHashLength).getBytes());
} catch (RowSpaceExceededException e) { } catch (RowSpaceExceededException e) {
Log.logException(e); Log.logException(e);
}
} }
return keyhashes; return keyhashes;
} }
public static HandleSet hashes2Handles(final String query) { public static HandleSet hashes2Handles(final String query) {
final HandleSet keyhashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0); final HandleSet keyhashes = new HandleSet(WordReferenceRow.urlEntryRow.primaryKeyLength, WordReferenceRow.urlEntryRow.objectOrder, 0);
if (query == null) return keyhashes; if (query != null) {
for (int i = 0; i < (query.length() / Word.commonHashLength); i++) try { for (int i = 0; i < (query.length() / Word.commonHashLength); i++) try {
keyhashes.put(query.substring(i * Word.commonHashLength, (i + 1) * Word.commonHashLength).getBytes()); keyhashes.put(query.substring(i * Word.commonHashLength, (i + 1) * Word.commonHashLength).getBytes());
} catch (RowSpaceExceededException e) { } catch (RowSpaceExceededException e) {
Log.logException(e); Log.logException(e);
}
} }
return keyhashes; return keyhashes;
} }
@ -251,7 +255,7 @@ public final class QueryParams {
public static String hashSet2hashString(final HandleSet hashes) { public static String hashSet2hashString(final HandleSet hashes) {
final byte[] bb = new byte[hashes.size() * Word.commonHashLength]; final byte[] bb = new byte[hashes.size() * Word.commonHashLength];
int p = 0; int p = 0;
for (byte[] b : hashes) { for (final byte[] b : hashes) {
assert b.length == Word.commonHashLength : "hash = " + new String(b); assert b.length == Word.commonHashLength : "hash = " + new String(b);
System.arraycopy(b, 0, bb, p, Word.commonHashLength); System.arraycopy(b, 0, bb, p, Word.commonHashLength);
p += Word.commonHashLength; p += Word.commonHashLength;
@ -284,9 +288,12 @@ public final class QueryParams {
* @return true if the query matches with the given text * @return true if the query matches with the given text
*/ */
public final boolean matchesText(final String text) { public final boolean matchesText(final String text) {
boolean ret = false;
final HandleSet wordhashes = Word.words2hashesHandles(Condenser.getWords(text).keySet()); final HandleSet wordhashes = Word.words2hashesHandles(Condenser.getWords(text).keySet());
if (SetTools.anymatch(wordhashes, this.excludeHashes)) return false; if (!SetTools.anymatch(wordhashes, this.excludeHashes)) {
return SetTools.totalInclusion(this.queryHashes, wordhashes); ret = SetTools.totalInclusion(this.queryHashes, wordhashes);
}
return ret;
} }
protected static final boolean anymatch(final String text, final HandleSet keyhashes) { protected static final boolean anymatch(final String text, final HandleSet keyhashes) {
@ -305,43 +312,49 @@ public final class QueryParams {
final TreeSet<String> exclude = new TreeSet<String>(NaturalOrder.naturalComparator); final TreeSet<String> exclude = new TreeSet<String>(NaturalOrder.naturalComparator);
final TreeSet<String> fullquery = new TreeSet<String>(NaturalOrder.naturalComparator); final TreeSet<String> fullquery = new TreeSet<String>(NaturalOrder.naturalComparator);
if ((querystring == null) || (querystring.length() == 0)) return new TreeSet[]{query, exclude, fullquery}; if ((querystring != null) && (querystring.length() > 0)) {
// convert Umlaute
querystring = AbstractScraper.stripAll(querystring).toLowerCase().trim();
int c;
for (int i = 0; i < seps.length(); i++) {
while ((c = querystring.indexOf(seps.charAt(i))) >= 0) { querystring = querystring.substring(0, c) + (((c + 1) < querystring.length()) ? (" " + querystring.substring(c + 1)) : ""); }
}
String s; // convert Umlaute
int l; querystring = AbstractScraper.stripAll(querystring).toLowerCase().trim();
// the string is clean now, but we must generate a set out of it int c;
final String[] a = querystring.split(" "); for (int i = 0; i < seps.length(); i++) {
for (int i = 0; i < a.length; i++) { while ((c = querystring.indexOf(seps.charAt(i))) >= 0) {
if (a[i].startsWith("-")) { querystring = querystring.substring(0, c) + (((c + 1) < querystring.length()) ? (" " + querystring.substring(c + 1)) : "");
exclude.add(a[i].substring(1)); }
} else { }
while ((c = a[i].indexOf('-')) >= 0) {
s = a[i].substring(0, c); String s;
l = s.length(); int l;
if (l >= Condenser.wordminsize) query.add(s); // the string is clean now, but we must generate a set out of it
if (l > 0) fullquery.add(s); final String[] a = querystring.split(" ");
a[i] = a[i].substring(c + 1); for (int i = 0; i < a.length; i++) {
} if (a[i].startsWith("-")) {
l = a[i].length(); exclude.add(a[i].substring(1));
if (l >= Condenser.wordminsize) query.add(a[i]); } else {
if (l > 0) fullquery.add(a[i]); while ((c = a[i].indexOf('-')) >= 0) {
} s = a[i].substring(0, c);
l = s.length();
if (l >= Condenser.wordminsize) {query.add(s);}
if (l > 0) {fullquery.add(s);}
a[i] = a[i].substring(c + 1);
}
l = a[i].length();
if (l >= Condenser.wordminsize) {query.add(a[i]);}
if (l > 0) {fullquery.add(a[i]);}
}
}
} }
return new TreeSet[]{query, exclude, fullquery}; return new TreeSet[]{query, exclude, fullquery};
} }
public String queryString(final boolean encodeHTML) { public String queryString(final boolean encodeHTML) {
if(encodeHTML){ final String ret;
return CharacterCoding.unicode2html(this.queryString, true); if (encodeHTML){
} ret =CharacterCoding.unicode2html(this.queryString, true);
return this.queryString; } else {
ret = this.queryString;
}
return ret;
} }
public TreeSet<String>[] queryWords() { public TreeSet<String>[] queryWords() {
@ -356,9 +369,9 @@ public final class QueryParams {
} }
public final Map<MultiProtocolURI, String> separateMatches(Map<MultiProtocolURI, String> links) { public final Map<MultiProtocolURI, String> separateMatches(final Map<MultiProtocolURI, String> links) {
Map<MultiProtocolURI, String> matcher = new HashMap<MultiProtocolURI, String>(); final Map<MultiProtocolURI, String> matcher = new HashMap<MultiProtocolURI, String>();
Iterator <Map.Entry<MultiProtocolURI, String>> i = links.entrySet().iterator(); final Iterator <Map.Entry<MultiProtocolURI, String>> i = links.entrySet().iterator();
Map.Entry<MultiProtocolURI, String> entry; Map.Entry<MultiProtocolURI, String> entry;
MultiProtocolURI url; MultiProtocolURI url;
String anchorText; String anchorText;
@ -375,23 +388,40 @@ public final class QueryParams {
} }
public String id(final boolean anonymized) { public String id(final boolean anonymized) {
final String asterisk = "*";
// generate a string that identifies a search so results can be re-used in a cache // generate a string that identifies a search so results can be re-used in a cache
String context = final StringBuilder context = new StringBuilder();
"*" + this.domType + context.append(asterisk);
"*" + this.contentdom + context.append(this.domType);
"*" + this.zonecode + context.append(asterisk);
"*" + new String(Word.word2hash(this.ranking.toExternalString())) + context.append(this.contentdom);
"*" + this.prefer + context.append(asterisk);
"*" + this.urlMask + context.append(this.zonecode);
"*" + this.sitehash + context.append(asterisk);
"*" + this.authorhash + context.append(Word.word2hash(this.ranking.toExternalString()));
"*" + this.targetlang + context.append(asterisk);
"*" + this.constraint + context.append(this.prefer);
"*" + this.maxDistance; context.append(asterisk);
if (anonymized) context.append(this.urlMask);
return anonymizedQueryHashes(this.queryHashes) + "-" + anonymizedQueryHashes(this.excludeHashes) + context; context.append(asterisk);
else context.append(this.sitehash);
return hashSet2hashString(this.queryHashes) + "-" + hashSet2hashString(this.excludeHashes) + context; context.append(asterisk);
context.append(this.authorhash);
context.append(asterisk);
context.append(this.targetlang);
context.append(asterisk);
context.append(this.constraint);
context.append(asterisk);
context.append(this.maxDistance);
final String ret;
if (anonymized) {
ret = anonymizedQueryHashes(this.queryHashes) + "-" + anonymizedQueryHashes(this.excludeHashes) + context;
} else {
ret = hashSet2hashString(this.queryHashes) + "-" + hashSet2hashString(this.excludeHashes) + context;
}
return ret;
} }
/** /**
@ -403,19 +433,64 @@ public final class QueryParams {
* @param addToQuery * @param addToQuery
* @return * @return
*/ */
public static String navurl(String ext, final int page, final int display, final QueryParams theQuery, final String originalUrlMask, String addToQuery, String nav) { public static String navurl(final String ext, final int page, final int display, final QueryParams theQuery, final String originalUrlMask, final String addToQuery, final String nav) {
return
"/yacysearch." + ext + "?display=" + display + final String ampersand = "&amp;";
"&query=" + theQuery.queryString(true).replace(' ', '+') + ((addToQuery == null) ? "" : "+" + addToQuery) +
"&maximumRecords="+ theQuery.displayResults() + final StringBuilder sb = new StringBuilder();
"&startRecord=" + (page * theQuery.displayResults()) + sb.append("/yacysearch.");
"&resource=" + ((theQuery.isLocal()) ? "local" : "global") + sb.append(ext);
"&verify=" + (theQuery.snippetCacheStrategy.mustBeOffline() ? "false" : "true") + sb.append("?display=");
"&nav=" + nav + sb.append(display);
"&urlmaskfilter=" + originalUrlMask +
"&prefermaskfilter=" + theQuery.prefer + sb.append(ampersand);
"&cat=href&amp;constraint=" + ((theQuery.constraint == null) ? "" : theQuery.constraint.exportB64()) + sb.append("query=");
"&contentdom=" + theQuery.contentdom() + sb.append(theQuery.queryString(true).replace(' ', '+'));
"&former=" + theQuery.queryString(true); sb.append((addToQuery == null) ? "" : "+" + addToQuery);
sb.append(ampersand);
sb.append("maximumRecords=");
sb.append(theQuery.displayResults());
sb.append(ampersand);
sb.append("startRecord=");
sb.append(page * theQuery.displayResults());
sb.append(ampersand);
sb.append("resource=");
sb.append((theQuery.isLocal()) ? "local" : "global");
sb.append(ampersand);
sb.append("verify=");
sb.append(theQuery.snippetCacheStrategy.mustBeOffline() ? "false" : "true");
sb.append(ampersand);
sb.append("nav=");
sb.append(nav);
sb.append(ampersand);
sb.append("urlmaskfilter=");
sb.append(originalUrlMask);
sb.append(ampersand);
sb.append("prefermaskfilter=");
sb.append(theQuery.prefer);
sb.append(ampersand);
sb.append("cat=href");
sb.append(ampersand);
sb.append("constraint=");
sb.append((theQuery.constraint == null) ? "" : theQuery.constraint.exportB64());
sb.append(ampersand);
sb.append("contentdom=");
sb.append(theQuery.contentdom());
sb.append(ampersand);
sb.append("former=");
sb.append(theQuery.queryString(true));
return sb.toString();
} }
} }

Loading…
Cancel
Save