Lucene.Net  3.0.3
Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
FieldValuesBitSets.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 using System;
19 using System.Collections.Generic;
20 using System.Linq;
21 using System.Text;
22 
23 using Lucene.Net.Analysis;
24 using Lucene.Net.Documents;
25 using Lucene.Net.Analysis.Standard;
26 using Lucene.Net.Index;
27 using Lucene.Net.Search;
28 using Lucene.Net.QueryParsers;
29 using Lucene.Net.Store;
30 using Lucene.Net.Util;
31 
32 namespace Lucene.Net.Search
33 {
34 
36  {
37  public string Field = "";
38  public Dictionary<string, OpenBitSetDISI> FieldValueBitSetPair = new Dictionary<string, OpenBitSetDISI>();
39 
40  IndexReader _Reader;
41 
42  public FieldValuesBitSets(IndexReader reader, string field)
43  {
44  this.Field = field;
45  this._Reader = reader;
46 
47  foreach (string val in GetFieldValues(field))
48  {
49  FieldValueBitSetPair.Add(val, GetBitSet(field, val));
50  }
51  }
52 
53  List<string> GetFieldValues(string groupByField)
54  {
55  List<string> list = new List<string>();
56  TermEnum te = _Reader.Terms(new Term(groupByField, ""));
57  if (te.Term.Field != groupByField) return list;
58  list.Add(te.Term.Text);
59 
60  while (te.Next())
61  {
62  if (te.Term.Field != groupByField) break;
63  list.Add(te.Term.Text);
64  }
65  return list;
66  }
67 
68  OpenBitSetDISI GetBitSet(string groupByField, string group)
69  {
70  TermQuery query = new TermQuery(new Term(groupByField, group));
71  Filter filter = new CachingWrapperFilter(new QueryWrapperFilter(query));
72  return new OpenBitSetDISI(filter.GetDocIdSet(_Reader).Iterator(), _Reader.MaxDoc);
73  }
74  }
75 }