You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ha...@apache.org on 2013/07/11 10:35:36 UTC
svn commit: r1502152 - in
/lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp:
TempFSTTermsReader.java TempTermOutputs.java
Author: han
Date: Thu Jul 11 08:35:35 2013
New Revision: 1502152
URL: http://svn.apache.org/r1502152
Log:
LUCENE-3069: steal bit to encode TTF
Modified:
lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempFSTTermsReader.java
lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempTermOutputs.java
Modified: lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempFSTTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempFSTTermsReader.java?rev=1502152&r1=1502151&r2=1502152&view=diff
==============================================================================
--- lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempFSTTermsReader.java (original)
+++ lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempFSTTermsReader.java Thu Jul 11 08:35:35 2013
@@ -20,6 +20,8 @@ package org.apache.lucene.codecs.temp;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
+import java.util.ArrayList;
+import java.util.BitSet;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
@@ -164,7 +166,7 @@ public class TempFSTTermsReader extends
this.docCount = docCount;
this.longsSize = longsSize;
this.dict = new FST<TempTermOutputs.TempMetaData>(in, new TempTermOutputs(fieldInfo, longsSize));
- //PrintWriter pw = new PrintWriter(new File("../graphs/ohohoh."+tmpname+".xxx.txt"));
+ //PrintWriter pw = new PrintWriter(new File("ohohoh."+tmpname+".xxx.txt"));
//Util.toDot(dict, pw, false, false);
//pw.close();
}
@@ -296,7 +298,6 @@ public class TempFSTTermsReader extends
seekPending = false;
}
- // nocommit: reuse?
@Override
public DocsEnum docs(Bits liveDocs, DocsEnum reuse, int flags) throws IOException {
decodeMetaData();
@@ -363,4 +364,28 @@ public class TempFSTTermsReader extends
}
}
}
+ static<T> void walk(FST<T> fst) throws IOException {
+ final ArrayList<FST.Arc<T>> queue = new ArrayList<FST.Arc<T>>();
+ final BitSet seen = new BitSet();
+ final FST.BytesReader reader = fst.getBytesReader();
+ final FST.Arc<T> startArc = fst.getFirstArc(new FST.Arc<T>());
+ queue.add(startArc);
+ while (!queue.isEmpty()) {
+ final FST.Arc<T> arc = queue.remove(0);
+ final long node = arc.target;
+ //System.out.println(arc);
+ if (FST.targetHasArcs(arc) && !seen.get((int) node)) {
+ //seen.set((int) node);
+ fst.readFirstRealTargetArc(node, arc, reader);
+ while (true) {
+ queue.add(new FST.Arc<T>().copyFrom(arc));
+ if (arc.isLast()) {
+ break;
+ } else {
+ fst.readNextRealArc(arc, reader);
+ }
+ }
+ }
+ }
+ }
}
Modified: lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempTermOutputs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempTermOutputs.java?rev=1502152&r1=1502151&r2=1502152&view=diff
==============================================================================
--- lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempTermOutputs.java (original)
+++ lucene/dev/branches/lucene3069/lucene/core/src/java/org/apache/lucene/codecs/temp/TempTermOutputs.java Thu Jul 11 08:35:35 2013
@@ -246,9 +246,15 @@ public class TempTermOutputs extends Out
out.writeBytes(data.bytes, 0, data.bytes.length);
}
if (bit2 > 0) { // stats exist
- out.writeVInt(data.docFreq);
if (hasPos) {
- out.writeVLong(data.totalTermFreq - data.docFreq);
+ if (data.docFreq == data.totalTermFreq) {
+ out.writeVInt((data.docFreq << 1) | 1);
+ } else {
+ out.writeVInt((data.docFreq << 1));
+ out.writeVLong(data.totalTermFreq - data.docFreq);
+ }
+ } else {
+ out.writeVInt(data.docFreq);
}
}
}
@@ -277,9 +283,14 @@ public class TempTermOutputs extends Out
in.readBytes(bytes, 0, bytesSize);
}
if (bit2 > 0) { // stats exist
- docFreq = in.readVInt();
+ int code = in.readVInt();
if (hasPos) {
- totalTermFreq = docFreq + in.readVLong();
+ totalTermFreq = docFreq = code >>> 1;
+ if ((code & 1) == 0) {
+ totalTermFreq += in.readVLong();
+ }
+ } else {
+ docFreq = code;
}
}
return new TempMetaData(longs, bytes, docFreq, totalTermFreq);