summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/net/yacy/kelondro/data/word/WordReferenceRow.java13
-rw-r--r--source/net/yacy/kelondro/data/word/WordReferenceVars.java22
-rw-r--r--test/java/net/yacy/kelondro/rwi/ReferenceContainerTest.java14
3 files changed, 38 insertions, 11 deletions
diff --git a/source/net/yacy/kelondro/data/word/WordReferenceRow.java b/source/net/yacy/kelondro/data/word/WordReferenceRow.java
index e80f2a9a7..ac10466f2 100644
--- a/source/net/yacy/kelondro/data/word/WordReferenceRow.java
+++ b/source/net/yacy/kelondro/data/word/WordReferenceRow.java
@@ -98,7 +98,7 @@ public final class WordReferenceRow extends AbstractReference implements WordRef
private static final int col_posintext = 15; // t 2 first appearance of word in text
private static final int col_posinphrase = 16; // r 1 position of word in its phrase
private static final int col_posofphrase = 17; // o 1 number of the phrase where word appears
- private static final int col_reserve1 = 18; // i 1 reserve1
+ private static final int col_worddistance = 18; // i avg distance of search query words
private static final int col_reserve2 = 19; // k 1 reserve2
// appearance flags, used in RWI entry
@@ -130,6 +130,7 @@ public final class WordReferenceRow extends AbstractReference implements WordRef
final char doctype, // type of document
final int outlinksSame, // outlinks to same domain
final int outlinksOther, // outlinks to other domain
+ final int wordDistance, // average distance of multi search query words
final Bitfield flags // attributes to the url and to the word according the url
) {
@@ -155,7 +156,7 @@ public final class WordReferenceRow extends AbstractReference implements WordRef
this.entry.setCol(col_posintext, posintext);
this.entry.setCol(col_posinphrase, posinphrase);
this.entry.setCol(col_posofphrase, posofphrase);
- this.entry.setCol(col_reserve1, 0);
+ this.entry.setCol(col_worddistance, wordDistance);
this.entry.setCol(col_reserve2, 0);
}
@@ -194,7 +195,7 @@ public final class WordReferenceRow extends AbstractReference implements WordRef
this.entry.setCol(col_lother, outlinksOther);
this.entry.setCol(col_urlLength, urlLength);
this.entry.setCol(col_urlComps, urlComps);
- this.entry.setCol(col_reserve1, 0);
+ this.entry.setCol(col_worddistance, 0);
this.entry.setCol(col_reserve2, 0);
}
@@ -271,6 +272,12 @@ public final class WordReferenceRow extends AbstractReference implements WordRef
int pos = (int) this.entry.getColLong(col_posintext);
return pos;
}
+
+ @Override
+ public int distance() {
+ final int distance = (int) this.entry.getColLong(col_worddistance);
+ return distance;
+ }
/**
* positions() is used to remember word positions for each query word of an
diff --git a/source/net/yacy/kelondro/data/word/WordReferenceVars.java b/source/net/yacy/kelondro/data/word/WordReferenceVars.java
index ae356fd4e..c045b0ff4 100644
--- a/source/net/yacy/kelondro/data/word/WordReferenceVars.java
+++ b/source/net/yacy/kelondro/data/word/WordReferenceVars.java
@@ -31,6 +31,7 @@ import java.util.Comparator;
import java.util.Queue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
+
import net.yacy.cora.date.MicroDate;
import net.yacy.cora.document.encoding.ASCII;
import net.yacy.cora.document.encoding.UTF8;
@@ -66,6 +67,9 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
posinphrase, posofphrase,
urlcomps, urllength,
wordsintext, wordsintitle;
+
+ /** Stored average words distance, when it can not be processed from positions because created from a WordReferenceRow instance */
+ private int distance;
private int virtualAge;
private Queue<Integer> positions; // word positons of joined references
private double termFrequency;
@@ -109,6 +113,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
} else {
this.positions = null;
}
+ this.distance = 0; // stored distance value is set to zero here because it has to be calculated from positions
this.posinphrase = posinphrase;
this.posintext = posintext;
this.posofphrase = posofphrase;
@@ -139,6 +144,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
} else {
this.positions = null;
}
+ this.distance = e.distance();
this.posinphrase = e.posinphrase();
this.posintext = e.posintext();
this.posofphrase = e.posofphrase();
@@ -165,6 +171,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
this.lother = 0;
this.phrasesintext = 0;
this.positions = null;
+ this.distance = 0;
this.posinphrase = 0;
this.posintext = 0;
this.posofphrase = 0;
@@ -275,6 +282,16 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
public Collection<Integer> positions() {
return this.positions;
}
+
+ @Override
+ public int distance() {
+ int value = super.distance();
+ if(value == 0) {
+ /* Calcualtion from positions returned 0 : let's try with the stored value */
+ value = this.distance;
+ }
+ return value;
+ }
@Override
public int posofphrase() {
@@ -299,6 +316,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
this.type, // type of document
this.llocal, // outlinks to same domain
this.lother, // outlinks to other domain
+ this.distance(), // // average distance of multi search query words
this.flags // attributes to the url and to the word according the url
);
}
@@ -376,7 +394,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
if (this.posintext > (v = other.posintext)) this.posintext = v;
// calculate and remember min distance
- if (this.positions != null || other.positions != null) {
+ if (this.distance() > 0 || other.distance() > 0) {
int odist = other.distance();
int dist = this.distance();
if (odist > 0 && odist < dist) {
@@ -413,7 +431,7 @@ public class WordReferenceVars extends AbstractReference implements WordReferenc
if (this.posintext < (v = other.posintext)) this.posintext = v;
// calculate and remember max distance
- if (this.positions != null || other.positions != null) {
+ if (this.distance() > 0 || other.distance() > 0) {
int odist = other.distance();
int dist = this.distance();
if (odist > 0 && odist > dist) {
diff --git a/test/java/net/yacy/kelondro/rwi/ReferenceContainerTest.java b/test/java/net/yacy/kelondro/rwi/ReferenceContainerTest.java
index 646b55f6e..6058522eb 100644
--- a/test/java/net/yacy/kelondro/rwi/ReferenceContainerTest.java
+++ b/test/java/net/yacy/kelondro/rwi/ReferenceContainerTest.java
@@ -19,8 +19,15 @@
*/
package net.yacy.kelondro.rwi;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
+
+import org.junit.Test;
+
import net.yacy.cora.document.id.DigestURL;
import net.yacy.cora.document.id.MultiProtocolURL;
import net.yacy.crawler.retrieval.Response;
@@ -29,10 +36,6 @@ import net.yacy.kelondro.data.word.WordReference;
import net.yacy.kelondro.data.word.WordReferenceFactory;
import net.yacy.kelondro.data.word.WordReferenceVars;
import net.yacy.kelondro.util.Bitfield;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import org.junit.Test;
/**
* Unit tests for ReferenceContainer class.
@@ -50,7 +53,7 @@ public class ReferenceContainerTest {
ReferenceFactory<WordReference> wordReferenceFactory = new WordReferenceFactory();
byte[] termHash = Word.word2hash("test");
- ReferenceContainer<WordReference> rc = new ReferenceContainer(wordReferenceFactory, termHash);
+ ReferenceContainer<WordReference> rc = new ReferenceContainer<WordReference>(wordReferenceFactory, termHash);
// prepare a WordReference to be added to the container
DigestURL url = new DigestURL("http://test.org/test.html");
@@ -89,7 +92,6 @@ public class ReferenceContainerTest {
assertNotNull("getReference failed", wc);
- // TODO: ReferenceContainer used for rwi results. As distance doesn't persist after adding ref to container making the distance ranking obsolete -> remove or fix
System.out.println("-----------------------------------------------------------");
System.out.println("WordReference (word distance) before add to container: " + wentry.distance());
System.out.println("WordReference (word distance) after get from container: " + wc.distance());