Пример #1
0
        public override DocIdSet GetDocIdSet(Lucene.Net.Index.IndexReader reader)
        {
            //创建一个Bit,默认里面所有元素都是0
            OpenBitSet openBitSet = new OpenBitSet(reader.MaxDoc);//获取最大文档最大编号
            FilterInfo filterInfo = FilterDict.FilterInfo(this._language);

            if (filterInfo.Enabled)
            {
                this.SetOrClear(reader, openBitSet, filterInfo.SetOrClear);
            }
            else
            {//先把元素填满,都是1。
                openBitSet.Set(0L, reader.MaxDoc);
            }
            return(openBitSet);
        }
Пример #2
0
        /// <summary>
        /// 执行自定义过滤条件
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="openBitSet"></param>
        /// <param name="setOrClear">Set Or Clear</param>
        private void SetOrClear(IndexReader reader, OpenBitSet openBitSet, bool setOrClear)
        {
            if (!setOrClear)
            {//如果是清除操作,先把所有元素填满,都是1。
                openBitSet.Set(0L, reader.MaxDoc);
            }
            FilterInfo filterInfo = FilterDict.FilterInfo(this._language);

            string[] values = filterInfo.Values;
            if (values != null)
            {
                TermDocs termDocs = null;
                foreach (string value in values)
                {
                    if (filterInfo.FieldType == FieldType.DATETIME)
                    {
                        long ticks = DateTime.Parse(value).Ticks;
                        termDocs = reader.TermDocs(new Term(filterInfo.FieldName, ticks.ToString()));
                    }
                    else
                    {
                        termDocs = reader.TermDocs(new Term(filterInfo.FieldName, value));
                    }

                    int count = termDocs.Read(_doc, _freqs);
                    if (count == 1)
                    {
                        if (setOrClear)
                        {                            //显示
                            openBitSet.Set(_doc[0]); //将Document的Doc文档表示设置为1。
                        }
                        else
                        {                              //不显示
                            openBitSet.Clear(_doc[0]); //将Document的Doc文档表示设置为0。
                        }
                    }
                }
            }
        }