You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by 291699763 <29...@qq.com> on 2017/12/28 11:15:57 UTC
may be lucene bug
Lucene version:6.6.0
when Index
document.add(new BinaryDocValuesField("CBID.CCID", new BytesRef(myValue)));
and when search
int totalHits = indexSearcher.count(SpanNearQuery);
int from = 0;
int size = 10000;
int pageTime = 0;
int loadTime = 0;
Set<String> fieldsToLoad = new HashSet<>();
fieldsToLoad.add("CBID.CCID");
List<LeafReaderContext> leaves = indexSearcher.getIndexReader().leaves();
while (from < totalHits) {
if (from > 0) {
//翻页
Stopwatch started = Stopwatch.createStarted();
TopDocs search = indexSearcher.search(content, from);
ScoreDoc scoreDoc = search.scoreDocs[search.scoreDocs.length - 1];
TopDocs topDocs = indexSearcher.searchAfter(scoreDoc, content, size);
pageTime += started.elapsed(TimeUnit.MILLISECONDS);
started = Stopwatch.createStarted();
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc doc : scoreDocs) {
for (LeafReaderContext leaf : leaves) {
BinaryDocValues binary = DocValues.getBinary(leaf.reader(), "CBID.CCID");
if (doc.doc >= leaf.docBase && doc.doc <= leaf.docBase + leaf.reader().maxDoc()) {
BytesRef bytesRef = binary.get(doc.doc - leaf.docBase);
keyValue.add(bytesRef.utf8ToString());
}
}
}
loadTime += started.elapsed(TimeUnit.MILLISECONDS);
} else {
//不翻页
Stopwatch started = Stopwatch.createStarted();
TopDocs search = indexSearcher.search(content, size);
pageTime += started.elapsed(TimeUnit.MILLISECONDS);
started = Stopwatch.createStarted();
ScoreDoc[] scoreDocs = search.scoreDocs;
for (ScoreDoc doc : scoreDocs) {
for (LeafReaderContext leaf : leaves) {
BinaryDocValues binary = DocValues.getBinary(leaf.reader(), "CBID.CCID");
if (doc.doc >= leaf.docBase && doc.doc <= leaf.docBase + leaf.reader().maxDoc()) {
BytesRef bytesRef = binary.get(doc.doc - leaf.docBase);
keyValue.add(bytesRef.utf8ToString());
}
}
}
loadTime += started.elapsed(TimeUnit.MILLISECONDS);
}
from += size;
}
but throw exception
Exception in thread "main" java.lang.RuntimeException: java.io.EOFException: read past EOF: MMapIndexInput(path="/data/home/p_wxuwang/index_withDocValues/_26.cfs") [slice=_26_Lucene54_0.dvd] [slice=var-binary]
at org.apache.lucene.codecs.lucene54.Lucene54DocValuesProducer$6.get(Lucene54DocValuesProducer.java:740)
at org.apache.lucene.codecs.lucene54.Lucene54DocValuesProducer$LongBinaryDocValues.get(Lucene54DocValuesProducer.java:1197)
at com.yuewen.nrzx.keyword.Main2.getWithDocValues(Main2.java:111)
at com.yuewen.nrzx.keyword.Main2.main(Main2.java:187)
Caused by: java.io.EOFException: read past EOF: MMapIndexInput(path="/data/home/p_wxuwang/index_withDocValues/_26.cfs") [slice=_26_Lucene54_0.dvd] [slice=var-binary]
at org.apache.lucene.store.ByteBufferIndexInput.readBytes(ByteBufferIndexInput.java:98)
at org.apache.lucene.codecs.lucene54.Lucene54DocValuesProducer$6.get(Lucene54DocValuesProducer.java:736)
I don't know why??
王旭 技术部/数据支持
18302118258|291699763
上海市浦东新区碧波路690号6号楼(201203)
www.yuewen.com