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