- added another network definition for personal web portals (replacing robinson peers in freeworld) for default use case selection. This solves the problem that the public network freeworld can spoil the personal web index during configuration phase with index entries that the user does not want for his personal web portal
- changed network selection to new network 'webportal' in ConfigBasic servlet - removed unused servlets from yacy/ui git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4837 6c8d7289-2bf4-0310-a012-ef5d649a1542pull/1/head
parent
2f8c180bec
commit
e4d93599e6
@ -0,0 +1,22 @@
|
||||
# Network definition file for a private web index
|
||||
# to be used as a network without any other peers
|
||||
# for a personal web portal
|
||||
|
||||
# general network definition
|
||||
network.unit.name = webportal
|
||||
network.unit.description = Personal Web Portal
|
||||
network.unit.domain = global
|
||||
network.unit.search.time = 4
|
||||
network.unit.dht = false
|
||||
network.unit.dhtredundancy.junior = 1
|
||||
network.unit.dhtredundancy.senior = 1
|
||||
|
||||
# each network may use different yacy distributions.
|
||||
# the auto-updater can access network-specific update locations
|
||||
network.unit.update.location0 = http://yacy.net/index.html
|
||||
network.unit.update.location1 = http://latest.yacy.de
|
||||
network.unit.update.location2 = http://www.findenstattsuchen.info/YaCy/latest/index.php
|
||||
network.unit.update.location3 = http://www.yacystats.de/yacybuild/
|
||||
|
||||
# properties for in-protocol response authentification:
|
||||
network.unit.protocol.control = uncontrolled
|
@ -1,2 +1,3 @@
|
||||
defaults/yacy.network.freeworld.unit
|
||||
defaults/yacy.network.webportal.unit
|
||||
defaults/yacy.network.intranet.unit
|
@ -1,84 +0,0 @@
|
||||
#(input)#
|
||||
::
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("input[@name='search']").setValue("#[former]#");
|
||||
$("input[@name='contentdom']").setValue("#[contentdom]#");
|
||||
$("input[@name='former']").setValue("#[former]#");
|
||||
$("input[@name='count']").setValue("#[count]#");
|
||||
$("input[@name='offset']").setValue("#[offset]#");
|
||||
$("input[@name='resource']").setValue("#[resource]#");
|
||||
$("input[@name='urlmaskfilter']").setValue("#[urlmaskfilter]#");
|
||||
$("input[@name='prefermaskfilter']").setValue("#[prefermaskfilter]#");
|
||||
$("input[@name='depth']").setValue("#[depth]#");
|
||||
$("input[@name='cat']").setValue("#[cat]#");
|
||||
$("input[@name='type']").setValue("#[type]#");
|
||||
$("input[@name='display']").setValue("#[display]#");
|
||||
$("input[@name='input']").setValue("#[input]#");
|
||||
$("input[@name='constraint']").setValue("#[constraint]#");
|
||||
});
|
||||
</script>
|
||||
::
|
||||
#(/input)#
|
||||
<!-- type the number of results -->
|
||||
#(num-results)#
|
||||
::
|
||||
<p>No Results.</p>
|
||||
::
|
||||
<p>No Results. (length of search words must be at least 3 characters)</p>
|
||||
::
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
var totalcount = #[totalcount]#;
|
||||
var size = $("input[@name='count']").getValue();
|
||||
var offset = $("input[@name='offset']").getValue();
|
||||
if (offset != 0) {
|
||||
var page = ((offset-1)/size);
|
||||
} else {
|
||||
var page = 0;
|
||||
}
|
||||
$("#pagination").pagination(totalcount, {
|
||||
current_page:page,
|
||||
items_per_page:size,
|
||||
num_edge_entries:2,
|
||||
num_display_entries:10,
|
||||
callback: loadContents
|
||||
});
|
||||
});
|
||||
function loadContents(page_id, jq) {
|
||||
var count = $("input[@name='count']").getValue();
|
||||
var offset = ((page_id*count)+1);
|
||||
$("input[@name='offset']").setValue(offset);
|
||||
var result = "result.html?" + $('#searchbox').formSerialize();
|
||||
var selected = $('#container ul').data('selected.ui-tabs');
|
||||
$('#container ul').tabs('url', selected, result);
|
||||
$('#container ul').tabs('load', selected);
|
||||
$('#pagination').trigger("update");
|
||||
}
|
||||
</script>
|
||||
::
|
||||
#(/num-results)#
|
||||
<div id="#[ID]#"></div>
|
||||
<div id="pagination" class="pagination">[Pagination]</div>
|
||||
<!-- linklist begin -->
|
||||
#(resultTable)#::<table width="100%"><tr class="TableHeader"><td width="30%">Media</td><td width="70%">URL</tr>#(/resultTable)#
|
||||
#{results}#
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
var id = "#"+"#[ID]#";
|
||||
$.get("/yacy/ui/ritem.html?rss=false&item=#[item]#&eventID=#[eventID]#", function(html) {
|
||||
$(id).append(html);
|
||||
$(id).trigger("update");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
#{/results}#
|
||||
#(resultTable)#::</table>#(/resultTable)#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,349 +0,0 @@
|
||||
// ysearchitem.java
|
||||
// (C) 2004-2008 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
|
||||
// first published 2004 on http://yacy.net
|
||||
//
|
||||
// This is a part of YaCy, a peer-to-peer based web search engine
|
||||
//
|
||||
// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
|
||||
// $LastChangedRevision: 1986 $
|
||||
// $LastChangedBy: orbiter $
|
||||
//
|
||||
// LICENSE
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import java.util.TreeSet;
|
||||
|
||||
import de.anomic.http.httpHeader;
|
||||
import de.anomic.index.indexWord;
|
||||
import de.anomic.kelondro.kelondroBitfield;
|
||||
import de.anomic.kelondro.kelondroMSetTools;
|
||||
import de.anomic.plasma.plasmaCondenser;
|
||||
import de.anomic.plasma.plasmaSearchEvent;
|
||||
import de.anomic.plasma.plasmaSearchQuery;
|
||||
import de.anomic.plasma.plasmaSearchRankingProfile;
|
||||
import de.anomic.plasma.plasmaSwitchboard;
|
||||
import de.anomic.server.serverCore;
|
||||
import de.anomic.server.serverObjects;
|
||||
import de.anomic.server.serverSwitch;
|
||||
import de.anomic.server.logging.serverLog;
|
||||
import de.anomic.tools.yFormatter;
|
||||
import de.anomic.xml.RSSFeed;
|
||||
import de.anomic.xml.RSSMessage;
|
||||
import de.anomic.yacy.yacyURL;
|
||||
|
||||
public class result {
|
||||
|
||||
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch<?> env) {
|
||||
final plasmaSwitchboard sb = (plasmaSwitchboard) env;
|
||||
sb.localSearchLastAccess = System.currentTimeMillis();
|
||||
|
||||
boolean searchAllowed = sb.getConfigBool("publicSearchpage", true) || sb.verifyAuthentication(header, false);
|
||||
boolean authenticated = sb.adminAuthenticated(header) >= 2;
|
||||
int display = (post == null) ? 0 : post.getInt("display", 0);
|
||||
if ((display == 1) && (!authenticated)) display = 0;
|
||||
int input = (post == null) ? 2 : post.getInt("input", 2);
|
||||
String promoteSearchPageGreeting = env.getConfig("promoteSearchPageGreeting", "");
|
||||
if (env.getConfigBool("promoteSearchPageGreeting.useNetworkName", false)) promoteSearchPageGreeting = env.getConfig("network.unit.description", "");
|
||||
if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P WEB SEARCH";
|
||||
String client = (String) header.get(httpHeader.CONNECTION_PROP_CLIENTIP); // the search client who initiated the search
|
||||
|
||||
// get query
|
||||
String querystring = (post == null) ? "" : post.get("search", "").trim();
|
||||
final serverObjects prop = new serverObjects();
|
||||
|
||||
boolean rss = (post == null) ? false : post.get("rss", "false").equals("true");
|
||||
if ((post == null) || (env == null) || (querystring.length() == 0) || (!searchAllowed)) {
|
||||
// we create empty entries for template strings
|
||||
prop.put("searchagain", "0");
|
||||
prop.put("input", input);
|
||||
prop.put("display", display);
|
||||
prop.put("input_input", input);
|
||||
prop.put("input_display", display);
|
||||
prop.put("promoteSearchPageGreeting", promoteSearchPageGreeting);
|
||||
prop.put("input_former", "");
|
||||
prop.put("former", "");
|
||||
prop.put("input_count", "10");
|
||||
prop.put("input_offset", "0");
|
||||
prop.put("input_resource", "global");
|
||||
prop.put("input_urlmaskfilter", ".*");
|
||||
prop.put("input_prefermaskfilter", "");
|
||||
prop.put("input_indexof", "off");
|
||||
prop.put("input_constraint", "");
|
||||
prop.put("input_cat", "href");
|
||||
prop.put("input_depth", "0");
|
||||
prop.put("input_contentdom", "text");
|
||||
prop.put("input_contentdomCheckText", "1");
|
||||
prop.put("input_contentdomCheckAudio", "0");
|
||||
prop.put("input_contentdomCheckVideo", "0");
|
||||
prop.put("input_contentdomCheckImage", "0");
|
||||
prop.put("input_contentdomCheckApp", "0");
|
||||
prop.put("excluded", "0");
|
||||
prop.put("results", "");
|
||||
prop.put("resultTable", "0");
|
||||
prop.put("num-results", searchAllowed ? "0" : "4");
|
||||
|
||||
return prop;
|
||||
}
|
||||
|
||||
// collect search attributes
|
||||
int maxDistance = Integer.MAX_VALUE;
|
||||
|
||||
if ((querystring.length() > 2) && (querystring.charAt(0) == '"') && (querystring.charAt(querystring.length() - 1) == '"')) {
|
||||
querystring = querystring.substring(1, querystring.length() - 1).trim();
|
||||
maxDistance = 1;
|
||||
}
|
||||
if (sb.facilityDB != null) try { sb.facilityDB.update("zeitgeist", querystring, post); } catch (Exception e) {}
|
||||
|
||||
int itemsPerPage = post.getInt("count", 10);
|
||||
int offset = post.getInt("offset", 0);
|
||||
boolean global = (post == null) ? true : post.get("resource", "global").equals("global");
|
||||
final boolean indexof = post.get("indexof","").equals("on");
|
||||
String urlmask = "";
|
||||
if (post.containsKey("urlmask") && post.get("urlmask").equals("no")) {
|
||||
urlmask = ".*";
|
||||
} else {
|
||||
urlmask = (post.containsKey("urlmaskfilter")) ? (String) post.get("urlmaskfilter") : ".*";
|
||||
}
|
||||
String prefermask = post.get("prefermaskfilter", "");
|
||||
if ((prefermask.length() > 0) && (prefermask.indexOf(".*") < 0)) prefermask = ".*" + prefermask + ".*";
|
||||
|
||||
kelondroBitfield constraint = ((post.containsKey("constraint")) && (post.get("constraint", "").length() > 0)) ? new kelondroBitfield(4, post.get("constraint", "______")) : null;
|
||||
if (indexof) {
|
||||
constraint = new kelondroBitfield(4);
|
||||
constraint.set(plasmaCondenser.flag_cat_indexof, true);
|
||||
}
|
||||
|
||||
int domainzone = post.getInt("zone", yacyURL.TLD_any_zone_filter);
|
||||
|
||||
// SEARCH
|
||||
//final boolean indexDistributeGranted = sb.getConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, "true").equals("true");
|
||||
//final boolean indexReceiveGranted = sb.getConfig("allowReceiveIndex", "true").equals("true");
|
||||
//final boolean offline = yacyCore.seedDB.mySeed().isVirgin();
|
||||
final boolean clustersearch = sb.isRobinsonMode() &&
|
||||
(sb.getConfig("cluster.mode", "").equals("privatecluster") ||
|
||||
sb.getConfig("cluster.mode", "").equals("publiccluster"));
|
||||
//if (offline || !indexDistributeGranted || !indexReceiveGranted) { global = false; }
|
||||
if (clustersearch) global = true; // switches search on, but search target is limited to cluster nodes
|
||||
|
||||
// find search domain
|
||||
int contentdomCode = plasmaSearchQuery.contentdomParser(post.get("contentdom", "text"));
|
||||
|
||||
// patch until better search profiles are available
|
||||
if ((contentdomCode != plasmaSearchQuery.CONTENTDOM_TEXT) && (itemsPerPage <= 32)) itemsPerPage = 32;
|
||||
|
||||
// check the search tracker
|
||||
TreeSet<Long> trackerHandles = sb.localSearchTracker.get(client);
|
||||
if (trackerHandles == null) trackerHandles = new TreeSet<Long>();
|
||||
boolean block = false;
|
||||
if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 3000)).size() > 1) try {
|
||||
Thread.sleep(3000);
|
||||
block = true;
|
||||
} catch (InterruptedException e) { e.printStackTrace(); }
|
||||
if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 60000)).size() > 12) try {
|
||||
Thread.sleep(10000);
|
||||
block = true;
|
||||
} catch (InterruptedException e) { e.printStackTrace(); }
|
||||
if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 600000)).size() > 36) try {
|
||||
Thread.sleep(30000);
|
||||
block = true;
|
||||
} catch (InterruptedException e) { e.printStackTrace(); }
|
||||
|
||||
if ((!block) && (post.get("cat", "href").equals("href"))) {
|
||||
|
||||
plasmaSearchRankingProfile ranking = sb.getRanking();
|
||||
final TreeSet<String>[] query = plasmaSearchQuery.cleanQuery(querystring); // converts also umlaute
|
||||
if ((query[0].contains("near")) && (querystring.indexOf("NEAR") >= 0)) {
|
||||
query[0].remove("near");
|
||||
ranking.coeff_worddistance = plasmaSearchRankingProfile.COEFF_MAX;
|
||||
}
|
||||
if ((query[0].contains("recent")) && (querystring.indexOf("RECENT") >= 0)) {
|
||||
query[0].remove("recent");
|
||||
ranking.coeff_date = plasmaSearchRankingProfile.COEFF_MAX;
|
||||
}
|
||||
|
||||
// filter out stopwords
|
||||
final TreeSet<String> filtered = kelondroMSetTools.joinConstructive(query[0], plasmaSwitchboard.stopwords);
|
||||
if (filtered.size() > 0) {
|
||||
kelondroMSetTools.excludeDestructive(query[0], plasmaSwitchboard.stopwords);
|
||||
}
|
||||
|
||||
// prepare search properties
|
||||
final boolean yacyonline = ((sb.webIndex.seedDB != null) && (sb.webIndex.seedDB.mySeed() != null) && (sb.webIndex.seedDB.mySeed().getPublicAddress() != null));
|
||||
final boolean globalsearch = (global) && (yacyonline) && (sb.getConfigBool(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, false));
|
||||
|
||||
// do the search
|
||||
TreeSet<String> queryHashes = indexWord.words2hashes(query[0]);
|
||||
plasmaSearchQuery theQuery = new plasmaSearchQuery(
|
||||
querystring,
|
||||
queryHashes,
|
||||
indexWord.words2hashes(query[1]),
|
||||
ranking,
|
||||
maxDistance,
|
||||
prefermask,
|
||||
contentdomCode,
|
||||
true,
|
||||
itemsPerPage,
|
||||
offset,
|
||||
urlmask,
|
||||
(clustersearch && globalsearch) ? plasmaSearchQuery.SEARCHDOM_CLUSTERALL :
|
||||
((globalsearch) ? plasmaSearchQuery.SEARCHDOM_GLOBALDHT : plasmaSearchQuery.SEARCHDOM_LOCAL),
|
||||
"",
|
||||
20,
|
||||
constraint,
|
||||
true,
|
||||
domainzone,
|
||||
client);
|
||||
|
||||
|
||||
// tell all threads to do nothing for a specific time
|
||||
sb.intermissionAllThreads(3000);
|
||||
|
||||
// filter out words that appear in bluelist
|
||||
theQuery.filterOut(plasmaSwitchboard.blueList);
|
||||
|
||||
// log
|
||||
serverLog.logInfo("LOCAL_SEARCH", "INIT WORD SEARCH: " + theQuery.queryString + ":" + theQuery.queryHashes + " - " + theQuery.neededResults() + " links to be computed, " + theQuery.displayResults() + " lines to be displayed");
|
||||
RSSFeed.channels(RSSFeed.LOCALSEARCH).addMessage(new RSSMessage("Local Search Request", theQuery.queryString, ""));
|
||||
long timestamp = System.currentTimeMillis();
|
||||
|
||||
// create a new search event
|
||||
if (plasmaSearchEvent.getEvent(theQuery.id(false)) == null) {
|
||||
theQuery.setOffset(0); // in case that this is a new search, always start without a offset
|
||||
offset = 0;
|
||||
}
|
||||
plasmaSearchEvent theSearch = plasmaSearchEvent.getEvent(theQuery, ranking, sb.webIndex, sb.crawlResults, (sb.isRobinsonMode()) ? sb.clusterhashes : null, false);
|
||||
|
||||
// generate result object
|
||||
serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER ORDERING OF SEARCH RESULTS: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds");
|
||||
serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER RESULT PREPARATION: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds");
|
||||
|
||||
// calc some more cross-reference
|
||||
serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER XREF PREPARATION: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds");
|
||||
|
||||
// log
|
||||
serverLog.logInfo("LOCAL_SEARCH", "EXIT WORD SEARCH: " + theQuery.queryString + " - " +
|
||||
(theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize()) + " links found, " +
|
||||
((System.currentTimeMillis() - timestamp) / 1000) + " seconds");
|
||||
|
||||
// prepare search statistics
|
||||
theQuery.resultcount = theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize();
|
||||
theQuery.searchtime = System.currentTimeMillis() - timestamp;
|
||||
theQuery.urlretrievaltime = theSearch.getURLRetrievalTime();
|
||||
theQuery.snippetcomputationtime = theSearch.getSnippetComputationTime();
|
||||
sb.localSearches.add(theQuery);
|
||||
|
||||
// update the search tracker
|
||||
trackerHandles.add(theQuery.handle);
|
||||
sb.localSearchTracker.put(client, trackerHandles);
|
||||
|
||||
int totalcount = theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize();
|
||||
prop.put("num-results_offset", offset);
|
||||
prop.put("num-results_itemscount", "0");
|
||||
prop.put("num-results_itemsPerPage", itemsPerPage);
|
||||
prop.put("num-results_totalcount", yFormatter.number(totalcount, !rss));
|
||||
prop.put("num-results_globalresults", (globalsearch) ? "1" : "0");
|
||||
prop.put("num-results_globalresults_localResourceSize", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize(), !rss));
|
||||
prop.put("num-results_globalresults_remoteResourceSize", yFormatter.number(theSearch.getRankingResult().getRemoteResourceSize(), !rss));
|
||||
prop.put("num-results_globalresults_remoteIndexCount", yFormatter.number(theSearch.getRankingResult().getRemoteIndexCount(), !rss));
|
||||
prop.put("num-results_globalresults_remotePeerCount", yFormatter.number(theSearch.getRankingResult().getRemotePeerCount(), !rss));
|
||||
|
||||
// generate the search result lines; they will be produced by another servlet
|
||||
for (int i = 0; i < theQuery.displayResults(); i++) {
|
||||
prop.put("results_" + i + "_item", offset + i);
|
||||
prop.put("results_" + i + "_eventID", theQuery.id(false));
|
||||
prop.put("results_" + i + "_ID", theQuery.id(false).substring(1,6));
|
||||
}
|
||||
prop.put("results", theQuery.displayResults());
|
||||
prop.put("resultTable", (contentdomCode <= 1) ? "0" : "1");
|
||||
prop.put("eventID", theQuery.id(false)); // for bottomline
|
||||
prop.put("ID", theQuery.id(false).substring(1,6)); // for bottomline
|
||||
|
||||
// process result of search
|
||||
if (filtered.size() > 0) {
|
||||
prop.put("excluded", "1");
|
||||
prop.putHTML("excluded_stopwords", filtered.toString());
|
||||
} else {
|
||||
prop.put("excluded", "0");
|
||||
}
|
||||
|
||||
if (prop == null || prop.isEmpty()) {
|
||||
if (post.get("search", "").length() < 3) {
|
||||
prop.put("num-results", "2"); // no results - at least 3 chars
|
||||
} else {
|
||||
prop.put("num-results", "1"); // no results
|
||||
}
|
||||
} else {
|
||||
prop.put("num-results", "3");
|
||||
}
|
||||
|
||||
prop.put("input_cat", "href");
|
||||
prop.put("input_depth", "0");
|
||||
|
||||
// adding some additional properties needed for the rss feed
|
||||
String hostName = (String) header.get("Host", "localhost");
|
||||
if (hostName.indexOf(":") == -1) hostName += ":" + serverCore.getPortNr(env.getConfig("port", "8080"));
|
||||
prop.put("searchBaseURL", "http://" + hostName + "/yacysearch.html");
|
||||
prop.put("rssYacyImageURL", "http://" + hostName + "/env/grafics/yacy.gif");
|
||||
}
|
||||
|
||||
prop.put("searchagain", global ? "1" : "0");
|
||||
prop.put("input", input);
|
||||
prop.put("display", display);
|
||||
prop.put("input_input", input);
|
||||
prop.put("input_display", display);
|
||||
prop.put("promoteSearchPageGreeting", promoteSearchPageGreeting);
|
||||
prop.putHTML("input_former", querystring);
|
||||
//prop.put("former", post.get("search", ""));
|
||||
prop.put("input_count", itemsPerPage);
|
||||
prop.put("input_offset", offset);
|
||||
prop.put("input_resource", global ? "global" : "local");
|
||||
prop.putHTML("input_urlmaskfilter", urlmask);
|
||||
prop.putHTML("input_prefermaskfilter", prefermask);
|
||||
prop.put("input_indexof", (indexof) ? "on" : "off");
|
||||
prop.put("input_constraint", (constraint == null) ? "" : constraint.exportB64());
|
||||
prop.put("input_contentdom", post.get("contentdom", "text"));
|
||||
prop.put("input_contentdomCheckText", (contentdomCode == plasmaSearchQuery.CONTENTDOM_TEXT) ? "1" : "0");
|
||||
prop.put("input_contentdomCheckAudio", (contentdomCode == plasmaSearchQuery.CONTENTDOM_AUDIO) ? "1" : "0");
|
||||
prop.put("input_contentdomCheckVideo", (contentdomCode == plasmaSearchQuery.CONTENTDOM_VIDEO) ? "1" : "0");
|
||||
prop.put("input_contentdomCheckImage", (contentdomCode == plasmaSearchQuery.CONTENTDOM_IMAGE) ? "1" : "0");
|
||||
prop.put("input_contentdomCheckApp", (contentdomCode == plasmaSearchQuery.CONTENTDOM_APP) ? "1" : "0");
|
||||
|
||||
// for RSS: don't HTML encode some elements
|
||||
prop.putHTML("rss_query", querystring, true);
|
||||
prop.put("rss_queryenc", yacyURL.escape(querystring.replace(' ', '+')));
|
||||
|
||||
sb.localSearchLastAccess = System.currentTimeMillis();
|
||||
|
||||
// return rewrite properties
|
||||
return prop;
|
||||
}
|
||||
/*
|
||||
private static String navhidden(int page, int display, plasmaSearchQuery theQuery) {
|
||||
return
|
||||
"<input type=\"hidden\" name=\"display\" value=\"" + display + "\" />" +
|
||||
"<input type=\"hidden\" name=\"search\" value=\"" + theQuery.queryString() + "\" />" +
|
||||
"<input type=\"hidden\" name=\"count\" value=\"" + theQuery.displayResults() + "\" />" +
|
||||
"<input type=\"hidden\" name=\"offset\" value=\"" + (page * theQuery.displayResults()) + "\" />" +
|
||||
"<input type=\"hidden\" name=\"resource\" value=\"" + theQuery.searchdom() + "\" />" +
|
||||
"<input type=\"hidden\" name=\"urlmaskfilter\" value=\"" + theQuery.urlMask + "\" />" +
|
||||
"<input type=\"hidden\" name=\"prefermaskfilter\" value=\"" + theQuery.prefer + "\" />" +
|
||||
"<input type=\"hidden\" name=\"cat\" value=\"href\" />" +
|
||||
"<input type=\"hidden\" name=\"constraint\" value=\"" + ((theQuery.constraint == null) ? "" : theQuery.constraint.exportB64()) + "\" />" +
|
||||
"<input type=\"hidden\" name=\"contentdom\" value=\"" + theQuery.contentdom() + "\" />" +
|
||||
"<input type=\"hidden\" name=\"former\" value=\"" + theQuery.queryString() + "\" />";
|
||||
}
|
||||
*/
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
#(content)#::
|
||||
<div class="searchresults">
|
||||
<h3 class="linktitle">
|
||||
<img src="../../ViewImage.png?width=16&height=16&code=#[faviconCode]#" id="f#[urlhash]#" class="favicon" width="16" height="16" alt="" />
|
||||
<a href="#[url]#" target="_parent">#[description]#</a></h3>
|
||||
<p class="snippet">#[snippet]#</p>
|
||||
<p class="url"><a href="#[url]#" id="url#[urlhash]#" target="_parent">#[urlname]#</a></p>
|
||||
</div>
|
||||
::
|
||||
#{items}#
|
||||
<div class="thumbcontainer">
|
||||
<a href="#[hrefCache]#" class="thumblink" onclick="return hs.expand(this)">
|
||||
<img src="/ViewImage.png?maxwidth=96&maxheight=96&code=#[code]#" alt="#[name]#">
|
||||
</a>
|
||||
<div class="highslide-caption"><a href="#[href]#">#[name]#<br \><a href="#[source]#">#[sourcedom]#</a></a></div>
|
||||
<div class="TableCellDark"><a href="#[href]#">#[name]#</a><br \>#[attr]#</div>
|
||||
</div>
|
||||
#{/items}#
|
||||
::
|
||||
#{items}#
|
||||
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
|
||||
#{/items}#
|
||||
::
|
||||
#{items}#
|
||||
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
|
||||
#{/items}#
|
||||
::
|
||||
#{items}#
|
||||
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
|
||||
#{/items}#
|
||||
#(/content)#
|
||||
#(rss)#::
|
||||
<item>
|
||||
<title>#[title]#</title>
|
||||
<link>#[link]#</link>
|
||||
<description>#[description]#</description>
|
||||
<pubDate>#[date]#</pubDate>
|
||||
<guid isPermaLink="false">#[urlhash]#</guid>
|
||||
</item>
|
||||
#(/rss)#
|
||||
#(dynamic)#::
|
||||
<script type="text/javascript">
|
||||
statistics("#[offset]#", "#[itemscount]#", "#[totalcount]#", "#[localResourceSize]#", "#[remoteResourceSize]#", "#[remoteIndexCount]#", "#[remotePeerCount]#");
|
||||
progressbar.step(1);
|
||||
</script>
|
||||
#(/dynamic)#
|
@ -1,202 +0,0 @@
|
||||
// ysearchitem.java
|
||||
// (C) 2007 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
|
||||
// first published 28.08.2007 on http://yacy.net
|
||||
//
|
||||
// This is a part of YaCy, a peer-to-peer based web search engine
|
||||
//
|
||||
// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
|
||||
// $LastChangedRevision: 1986 $
|
||||
// $LastChangedBy: orbiter $
|
||||
//
|
||||
// LICENSE
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import de.anomic.http.httpHeader;
|
||||
import de.anomic.plasma.plasmaSearchEvent;
|
||||
import de.anomic.plasma.plasmaSearchQuery;
|
||||
import de.anomic.plasma.plasmaSearchRankingProcess;
|
||||
import de.anomic.plasma.plasmaSnippetCache;
|
||||
import de.anomic.plasma.plasmaSwitchboard;
|
||||
import de.anomic.server.serverObjects;
|
||||
import de.anomic.server.serverSwitch;
|
||||
import de.anomic.tools.nxTools;
|
||||
import de.anomic.tools.yFormatter;
|
||||
import de.anomic.yacy.yacySeed;
|
||||
import de.anomic.yacy.yacyURL;
|
||||
|
||||
public class ritem {
|
||||
|
||||
private static boolean col = true;
|
||||
private static final int namelength = 60;
|
||||
private static final int urllength = 120;
|
||||
|
||||
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch<?> env) {
|
||||
final plasmaSwitchboard sb = (plasmaSwitchboard) env;
|
||||
final serverObjects prop = new serverObjects();
|
||||
|
||||
String eventID = post.get("eventID", "");
|
||||
boolean rss = post.get("rss", "false").equals("true");
|
||||
int item = post.getInt("item", -1);
|
||||
boolean auth = ((String) header.get(httpHeader.CONNECTION_PROP_CLIENTIP, "")).equals("localhost") || sb.verifyAuthentication(header, true);
|
||||
|
||||
// default settings for blank item
|
||||
prop.put("content", "0");
|
||||
prop.put("rss", "0");
|
||||
prop.put("references", "0");
|
||||
prop.put("dynamic", "0");
|
||||
|
||||
// find search event
|
||||
plasmaSearchEvent theSearch = plasmaSearchEvent.getEvent(eventID);
|
||||
if (theSearch == null) {
|
||||
// the event does not exist, show empty page
|
||||
return prop;
|
||||
}
|
||||
plasmaSearchQuery theQuery = theSearch.getQuery();
|
||||
int offset = theQuery.neededResults() - theQuery.displayResults();
|
||||
|
||||
// dynamically update count values
|
||||
if (!rss) {
|
||||
prop.put("dynamic_offset", offset + 1);
|
||||
prop.put("dynamic_itemscount", (item < 0) ? theQuery.neededResults() : item + 1);
|
||||
prop.put("dynamic_totalcount", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize(), !rss));
|
||||
prop.put("dynamic_localResourceSize", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize(), !rss));
|
||||
prop.put("dynamic_remoteResourceSize", yFormatter.number(theSearch.getRankingResult().getRemoteResourceSize(), !rss));
|
||||
prop.put("dynamic_remoteIndexCount", yFormatter.number(theSearch.getRankingResult().getRemoteIndexCount(), !rss));
|
||||
prop.put("dynamic_remotePeerCount", yFormatter.number(theSearch.getRankingResult().getRemotePeerCount(), !rss));
|
||||
prop.put("dynamic_resnav", "");
|
||||
prop.put("dynamic", "1");
|
||||
}
|
||||
|
||||
if (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_TEXT) {
|
||||
// text search
|
||||
|
||||
// generate result object
|
||||
plasmaSearchEvent.ResultEntry result = theSearch.oneResult(item);
|
||||
if (result == null) return prop; // no content
|
||||
|
||||
if (rss) {
|
||||
// text search for rss output
|
||||
prop.put("rss", "1"); // switch on specific content
|
||||
prop.putHTML("rss_title", result.title(), true);
|
||||
prop.putHTML("rss_description", result.textSnippet().getLineRaw(), true);
|
||||
prop.putHTML("rss_link", result.urlstring(), true);
|
||||
prop.put("rss_urlhash", result.hash());
|
||||
prop.put("rss_date", plasmaSwitchboard.dateString822(result.modified()));
|
||||
return prop;
|
||||
}
|
||||
|
||||
prop.put("content", theQuery.contentdom + 1); // switch on specific content
|
||||
prop.putHTML("content_description", result.title());
|
||||
prop.put("content_url", result.urlstring());
|
||||
|
||||
int port=result.url().getPort();
|
||||
yacyURL faviconURL;
|
||||
try {
|
||||
faviconURL = new yacyURL(result.url().getProtocol() + "://" + result.url().getHost() + ((port != -1) ? (":" + String.valueOf(port)) : "") + "/favicon.ico", null);
|
||||
} catch (MalformedURLException e1) {
|
||||
faviconURL = null;
|
||||
}
|
||||
|
||||
prop.putHTML("content_faviconCode", sb.licensedURLs.aquireLicense(faviconURL)); // aquire license for favicon url loading
|
||||
prop.put("content_urlhash", result.hash());
|
||||
prop.put("content_urlhexhash", yacySeed.b64Hash2hexHash(result.hash()));
|
||||
prop.putHTML("content_urlname", nxTools.shortenURLString(result.urlname(), urllength));
|
||||
prop.put("content_date", plasmaSwitchboard.dateString(result.modified()));
|
||||
prop.put("content_ybr", plasmaSearchRankingProcess.ybr(result.hash()));
|
||||
prop.putNum("content_size", result.filesize());
|
||||
|
||||
TreeSet<String>[] query = theQuery.queryWords();
|
||||
yacyURL wordURL = null;
|
||||
try {
|
||||
prop.putHTML("content_words", URLEncoder.encode(query[0].toString(),"UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {}
|
||||
prop.putHTML("content_former", theQuery.queryString);
|
||||
prop.put("content_rankingprops", result.word().toPropertyForm() + ", domLengthEstimated=" + yacyURL.domLengthEstimation(result.hash()) +
|
||||
((yacyURL.probablyRootURL(result.hash())) ? ", probablyRootURL" : "") +
|
||||
(((wordURL = yacyURL.probablyWordURL(result.hash(), query[0])) != null) ? ", probablyWordURL=" + wordURL.toNormalform(false, true) : ""));
|
||||
plasmaSnippetCache.TextSnippet snippet = result.textSnippet();
|
||||
prop.put("content_snippet", (snippet == null) ? "(snippet not found)" : snippet.getLineMarked(theQuery.queryHashes));
|
||||
return prop;
|
||||
}
|
||||
|
||||
if (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_IMAGE) {
|
||||
// image search; shows thumbnails
|
||||
|
||||
prop.put("content", theQuery.contentdom + 1); // switch on specific content
|
||||
plasmaSnippetCache.MediaSnippet ms = theSearch.oneImage(item);
|
||||
if (ms == null) {
|
||||
prop.put("content_items", "0");
|
||||
} else {
|
||||
prop.putHTML("content_items_0_hrefCache", (auth) ? "/ViewImage.png?url=" + ms.href.toNormalform(true, false) : ms.href.toNormalform(true, false));
|
||||
prop.putHTML("content_items_0_href", ms.href.toNormalform(true, false));
|
||||
prop.put("content_items_0_code", sb.licensedURLs.aquireLicense(ms.href));
|
||||
prop.putHTML("content_items_0_name", shorten(ms.name, namelength));
|
||||
prop.put("content_items_0_attr", (ms.attr.equals("-1 x -1")) ? "" : "(" + ms.attr + ")"); // attributes, here: original size of image
|
||||
prop.put("content_items_0_source", ms.source.toNormalform(true, false));
|
||||
prop.put("content_items_0_sourcedom", ms.source.getHost());
|
||||
prop.put("content_items", 1);
|
||||
}
|
||||
return prop;
|
||||
}
|
||||
|
||||
if ((theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_AUDIO) ||
|
||||
(theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_VIDEO) ||
|
||||
(theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_APP)) {
|
||||
// any other media content
|
||||
|
||||
// generate result object
|
||||
plasmaSearchEvent.ResultEntry result = theSearch.oneResult(item);
|
||||
if (result == null) return prop; // no content
|
||||
|
||||
prop.put("content", theQuery.contentdom + 1); // switch on specific content
|
||||
ArrayList<plasmaSnippetCache.MediaSnippet> media = result.mediaSnippets();
|
||||
if (item == 0) col = true;
|
||||
if (media != null) {
|
||||
plasmaSnippetCache.MediaSnippet ms;
|
||||
int c = 0;
|
||||
for (int i = 0; i < media.size(); i++) {
|
||||
ms = (plasmaSnippetCache.MediaSnippet) media.get(i);
|
||||
prop.putHTML("content_items_" + i + "_href", ms.href.toNormalform(true, false));
|
||||
prop.putHTML("content_items_" + i + "_hrefshort", nxTools.shortenURLString(ms.href.toNormalform(true, false), urllength));
|
||||
prop.putHTML("content_items_" + i + "_name", shorten(ms.name, namelength));
|
||||
prop.put("content_items_" + i + "_col", (col) ? "0" : "1");
|
||||
c++;
|
||||
col = !col;
|
||||
}
|
||||
prop.put("content_items", c);
|
||||
} else {
|
||||
prop.put("content_items", "0");
|
||||
}
|
||||
return prop;
|
||||
}
|
||||
|
||||
return prop;
|
||||
}
|
||||
|
||||
private static String shorten(String s, int length) {
|
||||
if (s.length() <= length) return s;
|
||||
int p = s.lastIndexOf('.');
|
||||
if (p < 0) return s.substring(0, length - 3) + "...";
|
||||
return s.substring(0, length - (s.length() - p) - 3) + "..." + s.substring(p);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue