Author: j16sdiz
Date: 2008-12-17 07:28:18 +0000 (Wed, 17 Dec 2008)
New Revision: 24421
Modified:
trunk/plugins/XMLSpider/XMLSpider.java
Log:
cache some TermPosition in memory
Modified: trunk/plugins/XMLSpider/XMLSpider.java
===================================================================
--- trunk/plugins/XMLSpider/XMLSpider.java 2008-12-17 07:17:31 UTC (rev
24420)
+++ trunk/plugins/XMLSpider/XMLSpider.java 2008-12-17 07:28:18 UTC (rev
24421)
@@ -1288,7 +1288,7 @@
if (word.length() < 3)
return;
Term term = getTermByWord(word, true);
- TermPosition termPos = getTermPosition(term, page,
true);
+ TermPosition termPos = getTermPosition(term, true);
synchronized (termPos) {
int[] newPositions = new
int[termPos.positions.length + 1];
@@ -1301,6 +1301,46 @@
mustWriteIndex = true;
}
+
+ protected Map<Term, TermPosition> termPosCache = new
LinkedHashMap<Term, TermPosition>() {
+ protected boolean removeEldestEntry(Map.Entry<Term,
TermPosition> eldest) {
+ return size() > 128;
+ }
+ };
+
+ protected TermPosition getTermPosition(Term term, boolean
create) {
+ synchronized (term) {
+ TermPosition cachedTermPos =
termPosCache.get(term);
+ if (cachedTermPos != null)
+ return cachedTermPos;
+
+ synchronized (page) {
+ Query query = db.query();
+ query.constrain(TermPosition.class);
+
+
query.descend("word").constrain(term.word);
+
query.descend("pageId").constrain(page.id);
+ ObjectSet<TermPosition> set =
query.execute();
+
+ if (set.hasNext()) {
+ cachedTermPos = set.next();
+ termPosCache.put(term,
cachedTermPos);
+ return cachedTermPos;
+ } else if (create) {
+ cachedTermPos = new
TermPosition();
+ cachedTermPos.word = term.word;
+ cachedTermPos.pageId = page.id;
+ cachedTermPos.positions = new
int[0];
+
+ termPosCache.put(term,
cachedTermPos);
+ db.store(cachedTermPos);
+ return cachedTermPos;
+ } else {
+ return null;
+ }
+ }
+ }
+ }
}
private boolean mustWriteIndex = false;
@@ -1495,31 +1535,4 @@
return null;
}
}
-
- protected TermPosition getTermPosition(Term term, Page page, boolean
create) {
- synchronized (term) {
- synchronized (page) {
- Query query = db.query();
- query.constrain(TermPosition.class);
-
- query.descend("word").constrain(term.word);
- query.descend("pageId").constrain(page.id);
- ObjectSet<TermPosition> set = query.execute();
-
- if (set.hasNext()) {
- return set.next();
- } else if (create) {
- TermPosition termPos = new
TermPosition();
- termPos.word = term.word;
- termPos.pageId = page.id;
- termPos.positions = new int[0];
-
- db.store(termPos);
- return termPos;
- } else {
- return null;
- }
- }
- }
- }
}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs