当前位置: 首页>>代码示例>>C#>>正文


C# AtomicReader.Fields方法代码示例

本文整理汇总了C#中Lucene.Net.Index.AtomicReader.Fields方法的典型用法代码示例。如果您正苦于以下问题:C# AtomicReader.Fields方法的具体用法?C# AtomicReader.Fields怎么用?C# AtomicReader.Fields使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Lucene.Net.Index.AtomicReader的用法示例。


在下文中一共展示了AtomicReader.Fields方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Uninvert

        /// <summary>
        /// Call this only once (if you subclass!) </summary>
        protected internal virtual void Uninvert(AtomicReader reader, Bits liveDocs, BytesRef termPrefix)
        {
            FieldInfo info = reader.FieldInfos.FieldInfo(Field);
            if (info != null && info.HasDocValues())
            {
                throw new InvalidOperationException("Type mismatch: " + Field + " was indexed as " + info.DocValuesType);
            }
            //System.out.println("DTO uninvert field=" + field + " prefix=" + termPrefix);
            long startTime = DateTime.Now.Millisecond;
            Prefix = termPrefix == null ? null : BytesRef.DeepCopyOf(termPrefix);

            int maxDoc = reader.MaxDoc();
            int[] index = new int[maxDoc]; // immediate term numbers, or the index into the byte[] representing the last number
            int[] lastTerm = new int[maxDoc]; // last term we saw for this document
            sbyte[][] bytes = new sbyte[maxDoc][]; // list of term numbers for the doc (delta encoded vInts)

            Fields fields = reader.Fields();
            if (fields == null)
            {
                // No terms
                return;
            }
            Terms terms = fields.Terms(Field);
            if (terms == null)
            {
                // No terms
                return;
            }

            TermsEnum te = terms.Iterator(null);
            BytesRef seekStart = termPrefix != null ? termPrefix : new BytesRef();
            //System.out.println("seekStart=" + seekStart.utf8ToString());
            if (te.SeekCeil(seekStart) == TermsEnum.SeekStatus.END)
            {
                // No terms match
                return;
            }

            // If we need our "term index wrapper", these will be
            // init'd below:
            IList<BytesRef> indexedTerms = null;
            PagedBytes indexedTermsBytes = null;

            bool testedOrd = false;

            // we need a minimum of 9 bytes, but round up to 12 since the space would
            // be wasted with most allocators anyway.
            sbyte[] tempArr = new sbyte[12];

            //
            // enumerate all terms, and build an intermediate form of the un-inverted field.
            //
            // During this intermediate form, every document has a (potential) byte[]
            // and the int[maxDoc()] array either contains the termNumber list directly
            // or the *end* offset of the termNumber list in it's byte array (for faster
            // appending and faster creation of the final form).
            //
            // idea... if things are too large while building, we could do a range of docs
            // at a time (but it would be a fair amount slower to build)
            // could also do ranges in parallel to take advantage of multiple CPUs

            // OPTIONAL: remap the largest df terms to the lowest 128 (single byte)
            // values.  this requires going over the field first to find the most
            // frequent terms ahead of time.

            int termNum = 0;
            DocsEnum = null;

            // Loop begins with te positioned to first term (we call
            // seek above):
            for (; ; )
            {
                BytesRef t = te.Term();
                if (t == null || (termPrefix != null && !StringHelper.StartsWith(t, termPrefix)))
                {
                    break;
                }
                //System.out.println("visit term=" + t.utf8ToString() + " " + t + " termNum=" + termNum);

                if (!testedOrd)
                {
                    try
                    {
                        OrdBase = (int)te.Ord();
                        //System.out.println("got ordBase=" + ordBase);
                    }
                    catch (System.NotSupportedException uoe)
                    {
                        // Reader cannot provide ord support, so we wrap
                        // our own support by creating our own terms index:
                        indexedTerms = new List<BytesRef>();
                        indexedTermsBytes = new PagedBytes(15);
                        //System.out.println("NO ORDS");
                    }
                    testedOrd = true;
                }

                VisitTerm(te, termNum);
//.........这里部分代码省略.........
开发者ID:joyanta,项目名称:lucene.net,代码行数:101,代码来源:DocTermOrds.cs

示例2: OrdWrappedTermsEnum

            internal long Ord_Renamed; // force "real" seek

            public OrdWrappedTermsEnum(DocTermOrds outerInstance, AtomicReader reader)
            {
                this.OuterInstance = outerInstance;

                if (!InstanceFieldsInitialized)
                {
                    InitializeInstanceFields();
                    InstanceFieldsInitialized = true;
                }
                Debug.Assert(outerInstance.IndexedTermsArray != null);
                TermsEnum = reader.Fields().Terms(outerInstance.Field).Iterator(null);
            }
开发者ID:joyanta,项目名称:lucene.net,代码行数:14,代码来源:DocTermOrds.cs

示例3: GetOrdTermsEnum

 /// <summary>
 /// Returns a TermsEnum that implements ord.  If the
 ///  provided reader supports ord, we just return its
 ///  TermsEnum; if it does not, we build a "private" terms
 ///  index internally (WARNING: consumes RAM) and use that
 ///  index to implement ord.  this also enables ord on top
 ///  of a composite reader.  The returned TermsEnum is
 ///  unpositioned.  this returns null if there are no terms.
 ///
 ///  <p><b>NOTE</b>: you must pass the same reader that was
 ///  used when creating this class
 /// </summary>
 public virtual TermsEnum GetOrdTermsEnum(AtomicReader reader)
 {
     if (IndexedTermsArray == null)
     {
         //System.out.println("GET normal enum");
         Fields fields = reader.Fields();
         if (fields == null)
         {
             return null;
         }
         Terms terms = fields.Terms(Field);
         if (terms == null)
         {
             return null;
         }
         else
         {
             return terms.Iterator(null);
         }
     }
     else
     {
         //System.out.println("GET wrapped enum ordBase=" + ordBase);
         return new OrdWrappedTermsEnum(this, reader);
     }
 }
开发者ID:joyanta,项目名称:lucene.net,代码行数:38,代码来源:DocTermOrds.cs


注:本文中的Lucene.Net.Index.AtomicReader.Fields方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。