|
|
@ -26,6 +26,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
package net.yacy.search.query;
|
|
|
|
package net.yacy.search.query;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.SortedMap;
|
|
|
|
import java.util.SortedMap;
|
|
|
@ -516,8 +517,8 @@ public final class SearchEvent
|
|
|
|
private final Semaphore trigger;
|
|
|
|
private final Semaphore trigger;
|
|
|
|
|
|
|
|
|
|
|
|
public SecondarySearchSuperviser() {
|
|
|
|
public SecondarySearchSuperviser() {
|
|
|
|
this.abstractsCache = new TreeMap<String, SortedMap<String, StringBuilder>>();
|
|
|
|
this.abstractsCache = Collections.synchronizedSortedMap(new TreeMap<String, SortedMap<String, StringBuilder>>());
|
|
|
|
this.checkedPeers = new TreeSet<String>();
|
|
|
|
this.checkedPeers = Collections.synchronizedSortedSet(new TreeSet<String>());
|
|
|
|
this.trigger = new Semaphore(0);
|
|
|
|
this.trigger = new Semaphore(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -527,16 +528,14 @@ public final class SearchEvent
|
|
|
|
* @param wordhash
|
|
|
|
* @param wordhash
|
|
|
|
* @param singleAbstract // a mapping from url-hashes to a string of peer-hashes
|
|
|
|
* @param singleAbstract // a mapping from url-hashes to a string of peer-hashes
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void addAbstract(final String wordhash, final TreeMap<String, StringBuilder> singleAbstract) {
|
|
|
|
public void addAbstract(final String wordhash, final SortedMap<String, StringBuilder> singleAbstract) {
|
|
|
|
final SortedMap<String, StringBuilder> oldAbstract;
|
|
|
|
final SortedMap<String, StringBuilder> oldAbstract;
|
|
|
|
synchronized ( this.abstractsCache ) {
|
|
|
|
|
|
|
|
oldAbstract = this.abstractsCache.get(wordhash);
|
|
|
|
oldAbstract = this.abstractsCache.get(wordhash);
|
|
|
|
if ( oldAbstract == null ) {
|
|
|
|
if ( oldAbstract == null ) {
|
|
|
|
// new abstracts in the cache
|
|
|
|
// new abstracts in the cache
|
|
|
|
this.abstractsCache.put(wordhash, singleAbstract);
|
|
|
|
this.abstractsCache.put(wordhash, singleAbstract);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// extend the abstracts in the cache: join the single abstracts
|
|
|
|
// extend the abstracts in the cache: join the single abstracts
|
|
|
|
new Thread() {
|
|
|
|
new Thread() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -544,11 +543,9 @@ public final class SearchEvent
|
|
|
|
for ( final Map.Entry<String, StringBuilder> oneref : singleAbstract.entrySet() ) {
|
|
|
|
for ( final Map.Entry<String, StringBuilder> oneref : singleAbstract.entrySet() ) {
|
|
|
|
final String urlhash = oneref.getKey();
|
|
|
|
final String urlhash = oneref.getKey();
|
|
|
|
final StringBuilder peerlistNew = oneref.getValue();
|
|
|
|
final StringBuilder peerlistNew = oneref.getValue();
|
|
|
|
synchronized ( oldAbstract ) {
|
|
|
|
final StringBuilder peerlistOld = oldAbstract.put(urlhash, peerlistNew);
|
|
|
|
final StringBuilder peerlistOld = oldAbstract.put(urlhash, peerlistNew);
|
|
|
|
if ( peerlistOld != null ) {
|
|
|
|
if ( peerlistOld != null ) {
|
|
|
|
peerlistOld.append(peerlistNew);
|
|
|
|
peerlistOld.append(peerlistNew);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -567,27 +564,25 @@ public final class SearchEvent
|
|
|
|
SortedMap<String, StringBuilder> urlPeerlist;
|
|
|
|
SortedMap<String, StringBuilder> urlPeerlist;
|
|
|
|
int p;
|
|
|
|
int p;
|
|
|
|
boolean hasURL;
|
|
|
|
boolean hasURL;
|
|
|
|
synchronized ( this ) {
|
|
|
|
final Iterator<Map.Entry<String, SortedMap<String, StringBuilder>>> i =
|
|
|
|
final Iterator<Map.Entry<String, SortedMap<String, StringBuilder>>> i =
|
|
|
|
this.abstractsCache.entrySet().iterator();
|
|
|
|
this.abstractsCache.entrySet().iterator();
|
|
|
|
while ( i.hasNext() ) {
|
|
|
|
while ( i.hasNext() ) {
|
|
|
|
entry = i.next();
|
|
|
|
entry = i.next();
|
|
|
|
word = entry.getKey();
|
|
|
|
word = entry.getKey();
|
|
|
|
urlPeerlist = entry.getValue();
|
|
|
|
urlPeerlist = entry.getValue();
|
|
|
|
hasURL = true;
|
|
|
|
hasURL = true;
|
|
|
|
for ( int j = 0; j < urls.length(); j = j + 12 ) {
|
|
|
|
for ( int j = 0; j < urls.length(); j = j + 12 ) {
|
|
|
|
url = urls.substring(j, j + 12);
|
|
|
|
url = urls.substring(j, j + 12);
|
|
|
|
peerlist = urlPeerlist.get(url);
|
|
|
|
peerlist = urlPeerlist.get(url);
|
|
|
|
p = (peerlist == null) ? -1 : peerlist.indexOf(peerhash);
|
|
|
|
p = (peerlist == null) ? -1 : peerlist.indexOf(peerhash);
|
|
|
|
if ( (p < 0) || (p % 12 != 0) ) {
|
|
|
|
if ( (p < 0) || (p % 12 != 0) ) {
|
|
|
|
hasURL = false;
|
|
|
|
hasURL = false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( hasURL ) {
|
|
|
|
|
|
|
|
wordlist += word;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( hasURL ) {
|
|
|
|
|
|
|
|
wordlist += word;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return wordlist;
|
|
|
|
return wordlist;
|
|
|
|
}
|
|
|
|
}
|
|
|
|