示例#1
0
        public override DocComparator getComparator(IndexReader reader, int docBase)
        {
            var bitCount  = reader.maxDoc();
            var docValues = new OpenBitSet(bitCount);

            if (_exclude)
            {
                docValues.set(0, bitCount);
            }

            var docs         = new int[1];
            var freqs        = new int[1];
            var termTemplate = new Term(_fieldName);

            foreach (string special in _specials)
            {
                TermDocs termDocs = reader.termDocs(termTemplate.createTerm(special));
                int      count    = termDocs.read(docs, freqs);
                if (count == 1)
                {
                    if (_exclude)
                    {
                        docValues.fastClear(docs[0]);
                    }
                    else
                    {
                        docValues.fastSet(docs[0]);
                    }
                }
            }

            return(new SpecialsComparator(docValues));
        }
示例#2
0
        public override DocIdSet getDocIdSet(IndexReader reader)
        {
            var bitCount = reader.maxDoc();
            var bits     = new OpenBitSet(bitCount);

            if (_exclude)
            {
                bits.set(0, bitCount);
            }

            var docs         = new int[1];
            var freqs        = new int[1];
            var termTemplate = new Term(_fieldName);

            foreach (string special in _specials)
            {
                TermDocs termDocs = reader.termDocs(termTemplate.createTerm(special));
                int      count    = termDocs.read(docs, freqs);
                if (count == 1)
                {
                    if (_exclude)
                    {
                        bits.fastClear(docs[0]);
                    }
                    else
                    {
                        bits.fastSet(docs[0]);
                    }
                }
            }

            return(bits);
        }
示例#3
0
        /// <summary>Deletes all documents that have a given <code>term</code> indexed.
        /// This is useful if one uses a document field to hold a unique ID string for
        /// the document.  Then to delete such a document, one merely constructs a
        /// term with the appropriate field and the unique ID string as its text and
        /// passes it to this method.
        /// See {@link #DeleteDocument(int)} for information about when this deletion will
        /// become effective.
        ///
        /// </summary>
        /// <returns> the number of documents deleted
        /// </returns>
        /// <throws>  StaleReaderException if the index has changed </throws>
        /// <summary>  since this reader was opened
        /// </summary>
        /// <throws>  CorruptIndexException if the index is corrupt </throws>
        /// <throws>  LockObtainFailedException if another writer </throws>
        /// <summary>  has this index open (<code>write.lock</code> could not
        /// be obtained)
        /// </summary>
        /// <throws>  IOException if there is a low-level IO error </throws>
        public int DeleteDocuments(Term term)
        {
            EnsureOpen();
            TermDocs docs = TermDocs(term);

            if (docs == null)
            {
                return(0);
            }
            int n = 0;

            try
            {
                while (docs.Next())
                {
                    DeleteDocument(docs.Doc());
                    n++;
                }
            }
            finally
            {
                docs.Close();
            }
            return(n);
        }
示例#4
0
 /// <summary>Optimized implementation. </summary>
 public virtual int Read(int[] docs, int[] freqs)
 {
     while (true)
     {
         while (current == null)
         {
             if (pointer < readers.Length)
             {
                 // try next segment
                 base_Renamed = starts[pointer];
                 current      = TermDocs(pointer++);
             }
             else
             {
                 return(0);
             }
         }
         int end = current.Read(docs, freqs);
         if (end == 0)
         {
             // none left in segment
             current = null;
         }
         else
         {
             // got some
             int b = base_Renamed;                     // adjust doc numbers
             for (int i = 0; i < end; i++)
             {
                 docs[i] += b;
             }
             return(end);
         }
     }
 }
示例#5
0
 public virtual void  Seek(Term term)
 {
     this.term         = term;
     this.base_Renamed = 0;
     this.pointer      = 0;
     this.current      = null;
 }
        public virtual void  TestTerms()
        {
            TermEnum terms = _reader.Terms();

            Assert.IsTrue(terms != null);
            while (terms.Next() == true)
            {
                Term term = terms.Term;
                Assert.IsTrue(term != null);
                //System.out.println("Term: " + term);
                System.String fieldValue = (System.String)DocHelper.NameValues[term.Field];
                Assert.IsTrue(fieldValue.IndexOf(term.Text) != -1);
            }

            TermDocs termDocs = _reader.TermDocs();

            Assert.IsTrue(termDocs != null);
            termDocs.Seek(new Term(DocHelper.TextField1Key, "field"));
            Assert.IsTrue(termDocs.Next() == true);

            termDocs.Seek(new Term(DocHelper.NoNormsKey, DocHelper.NoNormsText));
            Assert.IsTrue(termDocs.Next() == true);


            TermPositions positions = _reader.TermPositions();

            positions.Seek(new Term(DocHelper.TextField1Key, "field"));
            Assert.IsTrue(positions != null);
            Assert.IsTrue(positions.Doc == 0);
            Assert.IsTrue(positions.NextPosition() >= 0);
        }
			internal MatchAllScorer(MatchAllDocsQuery enclosingInstance, IndexReader reader, Similarity similarity, Weight w, byte[] norms):base(similarity)
			{
				InitBlock(enclosingInstance);
				this.termDocs = reader.TermDocs(null);
				score = w.Value;
				this.norms = norms;
			}
示例#8
0
        public virtual void  TestTerms()
        {
            TermEnum terms = reader.Terms();

            Assert.IsTrue(terms != null);
            while (terms.Next() == true)
            {
                Term term = terms.Term();
                Assert.IsTrue(term != null);
                //System.out.println("Term: " + term);
                System.String fieldValue = (System.String)DocHelper.nameValues[term.Field()];
                Assert.IsTrue(fieldValue.IndexOf(term.Text()) != -1);
            }

            TermDocs termDocs = reader.TermDocs();

            Assert.IsTrue(termDocs != null);
            termDocs.Seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "field"));
            Assert.IsTrue(termDocs.Next() == true);

            termDocs.Seek(new Term(DocHelper.NO_NORMS_KEY, DocHelper.NO_NORMS_TEXT));
            Assert.IsTrue(termDocs.Next() == true);


            TermPositions positions = reader.TermPositions();

            positions.Seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "field"));
            Assert.IsTrue(positions != null);
            Assert.IsTrue(positions.Doc() == 0);
            Assert.IsTrue(positions.NextPosition() >= 0);
        }
示例#9
0
        public IndexerSetupResult Setup(IXDescriptor descriptor)
        {
            if (setup)
            {
                return(IndexerSetupResult.Failure);
            }

            hashFactory = new System.Security.Cryptography.SHA256Managed();

            string _v = Convert.ToBase64String(hashFactory.ComputeHash(System.Text.UTF8Encoding.UTF8.GetBytes(descriptor.ToString())));

            int df = indexSearcher.DocFreq(new Term(indexerDocumentDescriptorVersion, _v));

            // set up searcher
            TermDocs term = indexSearcher.IndexReader.TermDocs();

            List <Document> docs = new List <Document>();

            while (term.Next())
            {
                docs.Add(indexSearcher.Doc(term.Doc));
            }

            return(IndexerSetupResult.Okay);
        }
示例#10
0
 internal MatchAllScorer(MatchAllDocsQuery enclosingInstance, IndexReader reader, Similarity similarity, Weight w, byte[] norms) : base(similarity)
 {
     InitBlock(enclosingInstance);
     this.termDocs = reader.TermDocs(null);
     score         = w.Value;
     this.norms    = norms;
 }
示例#11
0
        private void  AssertTermDocsCount(System.String msg, IndexReader reader, Term term, int expected)
        {
            TermDocs tdocs = null;

            try
            {
                tdocs = reader.TermDocs(term);
                Assert.IsNotNull(tdocs, msg + ", null TermDocs");
                int count = 0;
                while (tdocs.Next())
                {
                    count++;
                }
                Assert.AreEqual(expected, count, msg + ", count mismatch");
            }
            finally
            {
                if (tdocs != null)
                {
                    try
                    {
                        tdocs.Close();
                    }
                    catch (System.Exception e)
                    {
                    }
                }
            }
        }
示例#12
0
            protected internal override System.Object CreateValue(IndexReader reader, Entry entryKey)
            {
                System.String   field    = StringHelper.Intern(entryKey.field);
                System.String[] retArray = new System.String[reader.MaxDoc];
                TermDocs        termDocs = reader.TermDocs();
                TermEnum        termEnum = reader.Terms(new Term(field));

                try
                {
                    do
                    {
                        Term term = termEnum.Term;
                        if (term == null || (System.Object)term.Field != (System.Object)field)
                        {
                            break;
                        }
                        System.String termval = term.Text;
                        termDocs.Seek(termEnum);
                        while (termDocs.Next())
                        {
                            retArray[termDocs.Doc] = termval;
                        }
                    }while (termEnum.Next());
                }
                finally
                {
                    termDocs.Close();
                    termEnum.Close();
                }
                return(retArray);
            }
示例#13
0
 /// <summary>
 /// Ctor.
 /// </summary>
 /// <param name="termEnum">The TermEnum to wrap.</param>
 /// <param name="termDocs">The TermDocs to wrap.</param>
 /// <param name="field"> </param>
 /// <param name="enclosing"> </param>
 public TermEnumerator(TermEnum termEnum, TermDocs termDocs, string field, FieldEnumerator <T> enclosing)
 {
     this.termEnum  = termEnum;
     this.termDocs  = termDocs;
     this.fieldName = field;
     this.enclosing = enclosing;
 }
示例#14
0
        private static Hit CreateHit(Document primary_doc,
                                     IndexReader secondary_reader,
                                     TermDocs term_docs,
                                     FieldSelector fields)
        {
            Hit hit = DocumentToHit(primary_doc);

            if (secondary_reader == null)
            {
                return(hit);
            }

            // Get the stringified version of the URI
            // exactly as it comes out of the index.
            Term term = new Term("Uri", primary_doc.Get("Uri"));

            term_docs.Seek(term);

            // Move to the first (and only) matching term doc
            term_docs.Next();
            Document secondary_doc =
                (fields == null) ?
                secondary_reader.Document(term_docs.Doc()) :
                secondary_reader.Document(term_docs.Doc(), fields);

            // If we are using the secondary index, now we need to
            // merge the properties from the secondary index
            AddPropertiesToHit(hit, secondary_doc, false);

            return(hit);
        }
示例#15
0
        public override BitArray Bits(IndexReader reader)
        {
            // reader.GetVersion could be used to cache
            // Debug.WriteLine(reader.GetVersion()); // could be used to cache
            // if (cached reader == reader && _revFirst ==

            if (_revFirst == All || _revLast == All) // optimization
            {
                return(new BitArray(reader.MaxDoc(), true));
            }

            BitArray last_bits = new BitArray(reader.MaxDoc(), false);

            TermEnum t = reader.Terms(new Term(FieldName.RevisionLast, _revFirst.ToString(RevFormat)));
            TermDocs d = reader.TermDocs();

            //if (t.SkipTo((new Term(FieldName.RevisionLast, revision.ToString(RevFormat))))) // extremely slow
            if (t.Term() != null)
            {
                while (t.Term().Field() == FieldName.RevisionLast)
                {
                    d.Seek(t);
                    while (d.Next())
                    {
                        last_bits[d.Doc()] = true;
                    }
                    if (!t.Next())
                    {
                        break;
                    }
                }
            }

            // optimization, skip if we just using the head revision
            if (_revLast == Head)
            {
                return(last_bits);
            }

            BitArray first_bits = new BitArray(reader.MaxDoc(), true);

            t = reader.Terms(new Term("rev_first", (_revLast + 1).ToString(RevFormat)));
            //if (t.SkipTo((new Term("rev_first", (revision + 1).ToString(RevFormat))))) // extremely slow
            if (t.Term() != null)
            {
                while (t.Term().Field() == "rev_first")
                {
                    d.Seek(t);
                    while (d.Next())
                    {
                        first_bits[d.Doc()] = false;
                    }
                    if (!t.Next())
                    {
                        break;
                    }
                }
            }
            return(last_bits.And(first_bits));
        }
示例#16
0
        public virtual int doTest(int iter, int ndocs, int maxTF, float percentDocs)
        {
            Directory dir = new RAMDirectory();

            long start = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);

            AddDocs(dir, ndocs, "foo", "val", maxTF, percentDocs);
            long end = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);

            System.Console.Out.WriteLine("milliseconds for creation of " + ndocs + " docs = " + (end - start));

            IndexReader reader = IndexReader.Open(dir);
            TermEnum    tenum  = reader.Terms(new Term("foo", "val"));
            TermDocs    tdocs  = reader.TermDocs();

            start = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);

            int ret = 0;

            for (int i = 0; i < iter; i++)
            {
                tdocs.Seek(tenum);
                while (tdocs.Next())
                {
                    ret += tdocs.Doc();
                }
            }

            end = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);
            System.Console.Out.WriteLine("milliseconds for " + iter + " TermDocs iteration: " + (end - start));

            return(ret);
        }
示例#17
0
        public virtual void  TestTerms()
        {
            try
            {
                TermEnum terms = reader.Terms();
                Assert.IsTrue(terms != null);
                while (terms.Next() == true)
                {
                    Term term = terms.Term();
                    Assert.IsTrue(term != null);
                    //System.out.println("Term: " + term);
                    System.String fieldValue = (System.String)DocHelper.nameValues[term.Field()];
                    Assert.IsTrue(fieldValue.IndexOf(term.Text()) != -1);
                }

                TermDocs termDocs = reader.TermDocs();
                Assert.IsTrue(termDocs != null);
                termDocs.Seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "Field"));
                Assert.IsTrue(termDocs.Next() == true);

                TermPositions positions = reader.TermPositions();
                positions.Seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "Field"));
                Assert.IsTrue(positions != null);
                Assert.IsTrue(positions.Doc() == 0);
                Assert.IsTrue(positions.NextPosition() >= 0);
            }
            catch (System.IO.IOException e)
            {
                System.Console.Error.WriteLine(e.StackTrace);
                Assert.IsTrue(false);
            }
        }
示例#18
0
        /// <summary>Returns an enumeration of all the documents which contain
        /// <code>term</code>. For each document, the document number, the frequency of
        /// the term in that document is also provided, for use in search scoring.
        /// Thus, this method implements the mapping:
        /// <p><ul>
        /// Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq&gt;<sup>*</sup>
        /// </ul>
        /// <p>The enumeration is ordered by document number.  Each document number
        /// is greater than all that precede it in the enumeration.
        /// </summary>
        public virtual TermDocs TermDocs(Term term)
        {
            TermDocs termDocs = TermDocs();

            termDocs.Seek(term);
            return(termDocs);
        }
示例#19
0
        internal void _ShowTerm(Term t)
        {
            if (t == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoTerms"));
                return;
            }
            if (_luke.IndexReader == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoIndex"));
                return;
            }

            termDocs  = null;
            this.term = t;
            comboTerms.SelectedItem = t.Field();
            textTerm.Text           = t.Text();

            labelDocNum.Text   = "?";
            labelTermFreq.Text = "?";

            try
            {
                int freq = _luke.IndexReader.DocFreq(t);
                labelDocFreq.Text = freq.ToString();
                labelDocMax.Text  = freq.ToString();
            }
            catch (Exception e)
            {
                _luke.ShowStatus(e.Message);
                labelDocFreq.Text = "?";
            }
        }
示例#20
0
            protected internal override System.Object CreateValue(IndexReader reader, Entry entryKey)
            {
                Entry entry = entryKey;

                System.String field  = entry.field;
                FloatParser   parser = (FloatParser)entry.custom;

                if (parser == null)
                {
                    try
                    {
                        return(wrapper.GetFloats(reader, field, Lucene.Net.Search.FieldCache_Fields.DEFAULT_FLOAT_PARSER));
                    }
                    catch (System.FormatException)
                    {
                        return(wrapper.GetFloats(reader, field, Lucene.Net.Search.FieldCache_Fields.NUMERIC_UTILS_FLOAT_PARSER));
                    }
                }
                float[]  retArray = null;
                TermDocs termDocs = reader.TermDocs();
                TermEnum termEnum = reader.Terms(new Term(field));

                try
                {
                    do
                    {
                        Term term = termEnum.Term;
                        if (term == null || (System.Object)term.Field != (System.Object)field)
                        {
                            break;
                        }
                        float termval = parser.ParseFloat(term.Text);
                        if (retArray == null)
                        {
                            // late init
                            retArray = new float[reader.MaxDoc];
                        }
                        termDocs.Seek(termEnum);
                        while (termDocs.Next())
                        {
                            retArray[termDocs.Doc] = termval;
                        }
                    }while (termEnum.Next());
                }
                catch (StopFillCacheException)
                {
                }
                finally
                {
                    termDocs.Close();
                    termEnum.Close();
                }
                if (retArray == null)
                {
                    // no values
                    retArray = new float[reader.MaxDoc];
                }
                return(retArray);
            }
        public override DocIdSet GetDocIdSet(IndexReader reader)
        {
            TermEnum enumerator = query.GetEnum(reader);

            try
            {
                // if current term in enum is null, the enum is empty -> shortcut
                if (enumerator.Term == null)
                {
                    return(DocIdSet.EMPTY_DOCIDSET);
                }
                // else fill into an OpenBitSet
                OpenBitSet bitSet   = new OpenBitSet(reader.MaxDoc);
                int[]      docs     = new int[32];
                int[]      freqs    = new int[32];
                TermDocs   termDocs = reader.TermDocs();
                try
                {
                    int termCount = 0;
                    do
                    {
                        Term term = enumerator.Term;
                        if (term == null)
                        {
                            break;
                        }
                        termCount++;
                        termDocs.Seek(term);
                        while (true)
                        {
                            int count = termDocs.Read(docs, freqs);
                            if (count != 0)
                            {
                                for (int i = 0; i < count; i++)
                                {
                                    bitSet.Set(docs[i]);
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                    } while (enumerator.Next());

                    query.IncTotalNumberOfTerms(termCount); // {{Aroush-2.9}} is the use of 'temp' as is right?
                }
                finally
                {
                    termDocs.Close();
                }

                return(bitSet);
            }
            finally
            {
                enumerator.Close();
            }
        }
示例#22
0
        public virtual void  TestMerge()
        {
            //System.out.println("----------------TestMerge------------------");
            SegmentMerger merger = new SegmentMerger(mergedDir, mergedSegment, false);

            merger.Add(reader1);
            merger.Add(reader2);
            try
            {
                int docsMerged = merger.Merge();
                merger.CloseReaders();
                Assert.IsTrue(docsMerged == 2);
                //Should be able to open a new SegmentReader against the new directory
                SegmentReader mergedReader = new SegmentReader(new SegmentInfo(mergedSegment, docsMerged, mergedDir));
                Assert.IsTrue(mergedReader != null);
                Assert.IsTrue(mergedReader.NumDocs() == 2);
                Document newDoc1 = mergedReader.Document(0);
                Assert.IsTrue(newDoc1 != null);
                //There are 2 unstored fields on the document
                Assert.IsTrue(DocHelper.NumFields(newDoc1) == DocHelper.NumFields(doc1) - 2);
                Document newDoc2 = mergedReader.Document(1);
                Assert.IsTrue(newDoc2 != null);
                Assert.IsTrue(DocHelper.NumFields(newDoc2) == DocHelper.NumFields(doc2) - 2);

                TermDocs termDocs = mergedReader.TermDocs(new Term(DocHelper.TEXT_FIELD_2_KEY, "Field"));
                Assert.IsTrue(termDocs != null);
                Assert.IsTrue(termDocs.Next() == true);

                System.Collections.ICollection stored = mergedReader.GetIndexedFieldNames(true);
                Assert.IsTrue(stored != null);
                //System.out.println("stored size: " + stored.size());
                Assert.IsTrue(stored.Count == 2);

                TermFreqVector vector = mergedReader.GetTermFreqVector(0, DocHelper.TEXT_FIELD_2_KEY);
                Assert.IsTrue(vector != null);
                System.String[] terms = vector.GetTerms();
                Assert.IsTrue(terms != null);
                //System.out.println("Terms size: " + terms.length);
                Assert.IsTrue(terms.Length == 3);
                int[] freqs = vector.GetTermFrequencies();
                Assert.IsTrue(freqs != null);
                //System.out.println("Freqs size: " + freqs.length);

                for (int i = 0; i < terms.Length; i++)
                {
                    System.String term = terms[i];
                    int           freq = freqs[i];
                    //System.out.println("Term: " + term + " Freq: " + freq);
                    Assert.IsTrue(DocHelper.FIELD_2_TEXT.IndexOf(term) != -1);
                    Assert.IsTrue(DocHelper.FIELD_2_FREQS[i] == freq);
                }
            }
            catch (System.IO.IOException e)
            {
                System.Console.Error.WriteLine(e.StackTrace);
                Assert.IsTrue(false);
            }
            //System.out.println("---------------------end TestMerge-------------------");
        }
示例#23
0
        /// <summary>Returns an enumeration of all the documents which contain
        /// <code>term</code>. For each document, the document number, the frequency of
        /// the term in that document is also provided, for use in search scoring.
        /// Thus, this method implements the mapping:
        /// <p><ul>
        /// Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq&gt;<sup>*</sup>
        /// </ul>
        /// <p>The enumeration is ordered by document number.  Each document number
        /// is greater than all that precede it in the enumeration.
        /// </summary>
        /// <throws>  IOException if there is a low-level IO error </throws>
        public virtual TermDocs TermDocs(Term term)
        {
            EnsureOpen();
            TermDocs termDocs = TermDocs();

            termDocs.Seek(term);
            return(termDocs);
        }
示例#24
0
        public virtual void  TestMerge()
        {
            SegmentMerger merger = new SegmentMerger(mergedDir, mergedSegment);

            merger.Add(reader1);
            merger.Add(reader2);
            int docsMerged = merger.Merge();

            merger.CloseReaders();
            Assert.IsTrue(docsMerged == 2);
            //Should be able to open a new SegmentReader against the new directory
            SegmentReader mergedReader = SegmentReader.Get(new SegmentInfo(mergedSegment, docsMerged, mergedDir, false, true));

            Assert.IsTrue(mergedReader != null);
            Assert.IsTrue(mergedReader.NumDocs() == 2);
            Document newDoc1 = mergedReader.Document(0);

            Assert.IsTrue(newDoc1 != null);
            //There are 2 unstored fields on the document
            Assert.IsTrue(DocHelper.NumFields(newDoc1) == DocHelper.NumFields(doc1) - DocHelper.unstored.Count);
            Document newDoc2 = mergedReader.Document(1);

            Assert.IsTrue(newDoc2 != null);
            Assert.IsTrue(DocHelper.NumFields(newDoc2) == DocHelper.NumFields(doc2) - DocHelper.unstored.Count);

            TermDocs termDocs = mergedReader.TermDocs(new Term(DocHelper.TEXT_FIELD_2_KEY, "field"));

            Assert.IsTrue(termDocs != null);
            Assert.IsTrue(termDocs.Next() == true);

            System.Collections.Generic.ICollection <string> stored = mergedReader.GetFieldNames(IndexReader.FieldOption.INDEXED_WITH_TERMVECTOR);
            Assert.IsTrue(stored != null);
            //System.out.println("stored size: " + stored.size());
            Assert.IsTrue(stored.Count == 4, "We do not have 4 fields that were indexed with term vector");

            TermFreqVector vector = mergedReader.GetTermFreqVector(0, DocHelper.TEXT_FIELD_2_KEY);

            Assert.IsTrue(vector != null);
            System.String[] terms = vector.GetTerms();
            Assert.IsTrue(terms != null);
            //System.out.println("Terms size: " + terms.length);
            Assert.IsTrue(terms.Length == 3);
            int[] freqs = vector.GetTermFrequencies();
            Assert.IsTrue(freqs != null);
            //System.out.println("Freqs size: " + freqs.length);
            Assert.IsTrue(vector is TermPositionVector == true);

            for (int i = 0; i < terms.Length; i++)
            {
                System.String term = terms[i];
                int           freq = freqs[i];
                //System.out.println("Term: " + term + " Freq: " + freq);
                Assert.IsTrue(DocHelper.FIELD_2_TEXT.IndexOf(term) != -1);
                Assert.IsTrue(DocHelper.FIELD_2_FREQS[i] == freq);
            }

            TestSegmentReader.CheckNorms(mergedReader);
        }
示例#25
0
 private static Hit CreateHit(Document primary_doc,
                              IndexReader secondary_reader,
                              TermDocs term_docs)
 {
     return(CreateHit(primary_doc,
                      secondary_reader,
                      term_docs,
                      null));
 }
示例#26
0
		/// <summary> Construct a <c>TermScorer</c>.
		/// 
		/// </summary>
		/// <param name="weight">The weight of the <c>Term</c> in the query.
		/// </param>
		/// <param name="td">An iterator over the documents matching the <c>Term</c>.
		/// </param>
		/// <param name="similarity">The <c>Similarity</c> implementation to be used for score
		/// computations.
		/// </param>
		/// <param name="norms">The field norms of the document fields for the <c>Term</c>.
		/// </param>
		public /*internal*/ TermScorer(Weight weight, TermDocs td, Similarity similarity, byte[] norms):base(similarity)
		{
			this.weight = weight;
			this.termDocs = td;
			this.norms = norms;
			this.weightValue = weight.Value;
			
			for (int i = 0; i < SCORE_CACHE_SIZE; i++)
				scoreCache[i] = Similarity.Tf(i) * weightValue;
		}
示例#27
0
 /// <summary>
 /// Initialization method called by subclasses to simulate a shared
 /// base constructor as generic classes cannot have a parameterized ctor.
 /// </summary>
 /// <param name="reader">The index reader to read from.</param>
 /// <param name="fieldName">The field to enumerate.</param>
 /// <param name="includeDocs">Whether this enumerator will support TermDocs.</param>
 protected void Init(IndexReader reader, string fieldName, bool includeDocs)
 {
     this.termEnum = reader.Terms(new Term(fieldName));
     if (includeDocs)
     {
         this.termDocs = reader.TermDocs();
         this.tdEnum   = new TermDocEnumerator.TermDocUsingTermsEnumerator(this.termDocs, this.termEnum);
     }
     this.tEnum = new TermEnumerator(termEnum, termDocs, fieldName, this);
 }
                public override DocIdSetIterator Iterator()
                {
                    TermDocs td = reader.TermDocs(term);

                    if (td == null)
                    {
                        return(EmptyDocIdSet.Instance.Iterator());
                    }
                    return(new TermDocIdSetIterator(td));
                }
示例#29
0
 // constructor
 internal ValueSourceScorer(ValueSourceQuery enclosingInstance, Similarity similarity, IndexReader reader, ValueSourceWeight w)
     : base(similarity)
 {
     InitBlock(enclosingInstance);
     this.weight  = w;
     this.qWeight = w.Value;
     // this is when/where the values are first created.
     vals     = Enclosing_Instance.valSrc.GetValues(reader);
     termDocs = reader.TermDocs(null);
 }
示例#30
0
        static string GetProperty(IndexReader reader, string property)
        {
            TermDocs td = reader.TermDocs(GetPropertyId(property));

            if (!td.Next())
            {
                return(null);
            }
            return(reader.Document(td.Doc()).Get(ValueField));
        }
        public virtual void  TestFilterIndexReader_Renamed()
        {
            RAMDirectory directory = new MockRAMDirectory();
            IndexWriter  writer    = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);

            Document d1 = new Document();

            d1.Add(new Field("default", "one two", Field.Store.YES, Field.Index.ANALYZED));
            writer.AddDocument(d1);

            Document d2 = new Document();

            d2.Add(new Field("default", "one three", Field.Store.YES, Field.Index.ANALYZED));
            writer.AddDocument(d2);

            Document d3 = new Document();

            d3.Add(new Field("default", "two four", Field.Store.YES, Field.Index.ANALYZED));
            writer.AddDocument(d3);

            writer.Close();

            IndexReader reader = new TestReader(IndexReader.Open(directory));

            Assert.IsTrue(reader.IsOptimized());

            TermEnum terms = reader.Terms();

            while (terms.Next())
            {
                Assert.IsTrue(terms.Term().Text().IndexOf('e') != -1);
            }
            terms.Close();

            TermPositions positions = reader.TermPositions(new Term("default", "one"));

            while (positions.Next())
            {
                Assert.IsTrue((positions.Doc() % 2) == 1);
            }

            int NUM_DOCS = 3;

            TermDocs td = reader.TermDocs(null);

            for (int i = 0; i < NUM_DOCS; i++)
            {
                Assert.IsTrue(td.Next());
                Assert.AreEqual(i, td.Doc());
                Assert.AreEqual(1, td.Freq());
            }
            td.Close();
            reader.Close();
            directory.Close();
        }
示例#32
0
        private static List <Document> GetDocumentsFromTermDocs(TermDocs termDocs, IndexReaderFrame readerFrame)
        {
            var docs = new List <Document>();

            while (termDocs.Next())
            {
                docs.Add(readerFrame.IndexReader.Document(termDocs.Doc()));
            }
            docs.Sort(new DocumentVersionComparer());
            return(docs);
        }
示例#33
0
        private void buttonShowFirstDoc_Click(object sender, System.EventArgs e)
        {
            if (term == null) return;
            if (_luke.IndexReader == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoIndex"));
                return;
            }
            try
            {
                termDocs = _luke.IndexReader.TermDocs(term);
                termDocs.Next();
                labelDocNum.Text = "1";

                _ShowTermDoc(termDocs);
            }
            catch (Exception exc)
            {
                _luke.ShowStatus(exc.Message);
            }
        }
示例#34
0
		/* A Possible future optimization could skip entire segments */
		public virtual bool SkipTo(int target)
		{
			for (; ; )
			{
				if (current != null && current.SkipTo(target - base_Renamed))
				{
					return true;
				}
				else if (pointer < readers.Length)
				{
					base_Renamed = starts[pointer];
					current = TermDocs(pointer++);
				}
				else
					return false;
			}
		}
 public TermDocIdSetIterator(TermDocs td)
 {
     _td = td;
 }
示例#36
0
 private DocIdSetIterator BuildIterator(RandomAccessDocIdSet docset, TermDocs td)
 {
     return new FacetTermQueryDocIdSetIterator(docset, td);
 }
示例#37
0
			public virtual void  Seek(Term term)
			{
				IndexReader reader = ((IndexReader) Enclosing_Instance.fieldToReader[term.Field()]);
				termDocs = reader != null?reader.TermDocs(term):null;
			}
示例#38
0
 public FacetTermQueryDocIdSetIterator(RandomAccessDocIdSet docset, TermDocs td)
 {
     _docset = docset;
     _td = td;
 }
		private static Hit CreateHit ( Document primary_doc,
					IndexReader secondary_reader,
					TermDocs term_docs)
		{
			return CreateHit ( primary_doc,
					secondary_reader,
					term_docs,
					null);
		}
		private static Hit CreateHit ( Document primary_doc,
					IndexReader secondary_reader,
					TermDocs term_docs,
					FieldSelector fields)
		{
			Hit hit = DocumentToHit (primary_doc);

			if (secondary_reader == null)
				return hit;

			// Get the stringified version of the URI
			// exactly as it comes out of the index.
			Term term = new Term ("Uri", primary_doc.Get ("Uri"));
			term_docs.Seek (term);

			// Move to the first (and only) matching term doc
			term_docs.Next ();
			Document secondary_doc =
				(fields == null) ?
				secondary_reader.Document (term_docs.Doc ()) :
				secondary_reader.Document (term_docs.Doc (), fields);

			// If we are using the secondary index, now we need to
			// merge the properties from the secondary index
			AddPropertiesToHit (hit, secondary_doc, false);

			return hit;
		}
示例#41
0
 /* A Possible future optimization could skip entire segments */
 public virtual bool SkipTo(int target)
 {
     for (; ; )
     {
         if (current != null && current.SkipTo(target - base_Renamed))
         {
             return true;
         }
         else if (pointer < readers.Length)
         {
             if (tenum != null)
             {
                 SegmentMergeInfo smi = tenum.matchingSegments[matchingSegmentPos++];
                 if (smi == null)
                 {
                     pointer = readers.Length;
                     return false;
                 }
                 pointer = smi.ord;
             }
             base_Renamed = starts[pointer];
             current = TermDocs(pointer++);
         }
         else
             return false;
     }
 }
示例#42
0
 public virtual bool Next()
 {
     for (; ; )
     {
         if (current != null && current.Next())
         {
             return true;
         }
         else if (pointer < readers.Length)
         {
             if (tenum != null)
             {
                 smi = tenum.matchingSegments[matchingSegmentPos++];
                 if (smi == null)
                 {
                     pointer = readers.Length;
                     return false;
                 }
                 pointer = smi.ord;
             }
             base_Renamed = starts[pointer];
             current = TermDocs(pointer++);
         }
         else
         {
             return false;
         }
     }
 }
示例#43
0
 public virtual void  Seek(Term term)
 {
     this.term = term;
     this.base_Renamed = 0;
     this.pointer = 0;
     this.current = null;
     this.tenum = null;
     this.smi = null;
     this.matchingSegmentPos = 0;
 }
示例#44
0
			public virtual void  Seek(Term term)
			{
				termDocs = ((IndexReader) Enclosing_Instance.fieldToReader[term.Field()]).TermDocs(term);
			}
			public FilterTermDocs(TermDocs in_Renamed)
			{
				this.in_Renamed = in_Renamed;
			}
示例#46
0
        internal void _ShowTerm(Term t)
        {
            if (t == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoTerms"));
                return;
            }
            if (_luke.IndexReader == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoIndex"));
                return;
            }

            termDocs = null;
            this.term = t;
            comboTerms.SelectedItem = t.Field();
            textTerm.Text = t.Text();

            labelDocNum.Text = "?";
            labelTermFreq.Text = "?";

            try
            {
                int freq = _luke.IndexReader.DocFreq(t);
                labelDocFreq.Text = freq.ToString();
                labelDocMax.Text = freq.ToString();
            }
            catch (Exception e)
            {
                _luke.ShowStatus(e.Message);
                labelDocFreq.Text = "?";
            }
        }
示例#47
0
        private void _ShowTermDoc(TermDocs td)
        {
            if (_luke.IndexReader == null)
            {
                _luke.ShowStatus(_luke.resources.GetString("NoIndex"));
                return;
            }
            try
            {
                Document doc = _luke.IndexReader.Document(td.Doc());

                labelDocNum.Text = td.Doc().ToString();
                labelTermFreq.Text = td.Freq().ToString();

                _ShowDocFields(td.Doc(), doc);
            }
            catch (Exception e)
            {
                _luke.ShowStatus(e.Message);
            }
        }
示例#48
0
			public ParallelTermDocs(ParallelReader enclosingInstance, Term term)
			{
				InitBlock(enclosingInstance);
				if (term == null)
					termDocs = (Enclosing_Instance.readers.Count == 0)?null:((IndexReader) Enclosing_Instance.readers[0]).TermDocs(null);
				else
					Seek(term);
			}
示例#49
0
		public virtual void  Seek(Term term)
		{
			this.term = term;
			this.base_Renamed = 0;
			this.pointer = 0;
			this.current = null;
		}
示例#50
0
		public virtual bool Next()
		{
			for (; ; )
			{
				if (current != null && current.Next())
				{
					return true;
				}
				else if (pointer < readers.Length)
				{
					base_Renamed = starts[pointer];
					current = TermDocs(pointer++);
				}
				else
				{
					return false;
				}
			}
		}
示例#51
0
		/// <summary>Optimized implementation. </summary>
		public virtual int Read(int[] docs, int[] freqs)
		{
			while (true)
			{
				while (current == null)
				{
					if (pointer < readers.Length)
					{
						// try next segment
						base_Renamed = starts[pointer];
						current = TermDocs(pointer++);
					}
					else
					{
						return 0;
					}
				}
				int end = current.Read(docs, freqs);
				if (end == 0)
				{
					// none left in segment
					current = null;
				}
				else
				{
					// got some
					int b = base_Renamed; // adjust doc numbers
					for (int i = 0; i < end; i++)
						docs[i] += b;
					return end;
				}
			}
		}
示例#52
0
 // constructor
 internal ValueSourceScorer(ValueSourceQuery enclosingInstance, Similarity similarity, IndexReader reader, ValueSourceWeight w)
     : base(similarity)
 {
     InitBlock(enclosingInstance);
     this.weight = w;
     this.qWeight = w.Value;
     // this is when/where the values are first created.
     vals = Enclosing_Instance.valSrc.GetValues(reader);
     termDocs = reader.TermDocs(null);
 }
 public MatchAllDocIdSetIterator(IndexReader reader)
 {
     _termDocs = reader.TermDocs(null);
     _docid = -1;
 }