コード例 #1
0
ファイル: TermSpans.cs プロジェクト: thinhtp/liteweb.info
 public override bool Next()
 {
     if (count == freq)
     {
         if (!positions.Next())
         {
             doc = System.Int32.MaxValue;
             return(false);
         }
         doc   = positions.Doc();
         freq  = positions.Freq();
         count = 0;
     }
     position = positions.NextPosition();
     count++;
     return(true);
 }
コード例 #2
0
        public virtual void  TestCaching()
        {
            Directory   dir    = new RAMDirectory();
            IndexWriter writer = new IndexWriter(dir, new SimpleAnalyzer(), IndexWriter.MaxFieldLength.LIMITED);
            Document    doc    = new Document();
            TokenStream stream = new AnonymousClassTokenStream(this);

            stream = new CachingTokenFilter(stream);

            doc.Add(new Field("preanalyzed", stream, TermVector.NO));

            // 1) we consume all tokens twice before we add the doc to the index
            checkTokens(stream);
            stream.Reset();
            checkTokens(stream);

            // 2) now add the document to the index and verify if all tokens are indexed
            //    don't reset the stream here, the DocumentWriter should do that implicitly
            writer.AddDocument(doc);
            writer.Close();

            IndexReader   reader        = IndexReader.Open(dir);
            TermPositions termPositions = reader.TermPositions(new Term("preanalyzed", "term1"));

            Assert.IsTrue(termPositions.Next());
            Assert.AreEqual(1, termPositions.Freq());
            Assert.AreEqual(0, termPositions.NextPosition());

            termPositions.Seek(new Term("preanalyzed", "term2"));
            Assert.IsTrue(termPositions.Next());
            Assert.AreEqual(2, termPositions.Freq());
            Assert.AreEqual(1, termPositions.NextPosition());
            Assert.AreEqual(3, termPositions.NextPosition());

            termPositions.Seek(new Term("preanalyzed", "term3"));
            Assert.IsTrue(termPositions.Next());
            Assert.AreEqual(1, termPositions.Freq());
            Assert.AreEqual(2, termPositions.NextPosition());
            reader.Close();

            // 3) reset stream and consume tokens again
            stream.Reset();
            checkTokens(stream);
        }
コード例 #3
0
        public virtual void  TestPayloadsPos0()
        {
            for (int x = 0; x < 2; x++)
            {
                Directory   dir    = new MockRAMDirectory();
                IndexWriter writer = new IndexWriter(dir, new TestPayloadAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
                if (x == 1)
                {
                    writer.SetAllowMinus1Position();
                }
                Document doc = new Document();
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                System.IO.StreamWriter sw = new System.IO.StreamWriter(ms);
                sw.Write("a a b c d e a f g h i j a b k k");
                // flush to stream & reset it's position so it can be read
                sw.Flush();
                ms.Position = 0;
                doc.Add(new Field("content", new System.IO.StreamReader(ms)));
                writer.AddDocument(doc);

                IndexReader r = writer.GetReader();

                TermPositions tp    = r.TermPositions(new Term("content", "a"));
                int           count = 0;
                Assert.IsTrue(tp.Next());
                // "a" occurs 4 times
                Assert.AreEqual(4, tp.Freq());
                int expected;
                if (x == 1)
                {
                    expected = System.Int32.MaxValue;
                }
                else
                {
                    expected = 0;
                }
                Assert.AreEqual(expected, tp.NextPosition());
                if (x == 1)
                {
                    continue;
                }
                Assert.AreEqual(1, tp.NextPosition());
                Assert.AreEqual(3, tp.NextPosition());
                Assert.AreEqual(6, tp.NextPosition());

                // only one doc has "a"
                Assert.IsFalse(tp.Next());

                IndexSearcher is_Renamed = new IndexSearcher(r);

                SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a"));
                SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k"));
                SpanQuery[]   sqs  = new SpanQuery[] { stq1, stq2 };
                SpanNearQuery snq  = new SpanNearQuery(sqs, 30, false);

                count = 0;
                bool sawZero = false;
                //System.out.println("\ngetPayloadSpans test");
                Lucene.Net.Search.Spans.Spans pspans = snq.GetSpans(is_Renamed.GetIndexReader());
                while (pspans.Next())
                {
                    //System.out.println(pspans.doc() + " - " + pspans.start() + " - "+ pspans.end());
                    System.Collections.Generic.ICollection <byte[]> payloads = pspans.GetPayload();
                    sawZero |= pspans.Start() == 0;
                    for (System.Collections.IEnumerator it = payloads.GetEnumerator(); it.MoveNext();)
                    {
                        count++;
                        System.Object generatedAux2 = it.Current;
                        //System.out.println(new String((byte[]) it.next()));
                    }
                }
                Assert.AreEqual(5, count);
                Assert.IsTrue(sawZero);

                //System.out.println("\ngetSpans test");
                Lucene.Net.Search.Spans.Spans spans = snq.GetSpans(is_Renamed.GetIndexReader());
                count   = 0;
                sawZero = false;
                while (spans.Next())
                {
                    count++;
                    sawZero |= spans.Start() == 0;
                    //System.out.println(spans.doc() + " - " + spans.start() + " - " + spans.end());
                }
                Assert.AreEqual(4, count);
                Assert.IsTrue(sawZero);

                //System.out.println("\nPayloadSpanUtil test");

                sawZero = false;
                PayloadSpanUtil psu = new PayloadSpanUtil(is_Renamed.GetIndexReader());
                System.Collections.Generic.ICollection <byte[]> pls = psu.GetPayloadsForQuery(snq);
                count = pls.Count;
                for (System.Collections.IEnumerator it = pls.GetEnumerator(); it.MoveNext();)
                {
                    System.String s = new System.String(System.Text.UTF8Encoding.UTF8.GetChars((byte[])it.Current));
                    //System.out.println(s);
                    sawZero |= s.Equals("pos: 0");
                }
                Assert.AreEqual(5, count);
                Assert.IsTrue(sawZero);
                writer.Close();
                is_Renamed.GetIndexReader().Close();
                dir.Close();
            }
        }