[TestMethod]
public void FacetQueryTest()
{
// Create index.
string indexPath = @"c:\temp\FacetQueryTest";
{
using (Lucene.Net.Store.Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)))
{
int number;
using (IndexWriter modifier = new IndexWriter(directory, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), true, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED))
{
{
number = 1;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 2;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 3;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 4;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 5;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 6;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 7;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 8;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 9;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
{
number = 10;
string numberFormatted = number.ToString("00", System.Globalization.CultureInfo.InvariantCulture);
Document doc = new Document();
doc.Add(new Field("number", numberFormatted, Field.Store.YES, Field.Index.NOT_ANALYZED));
modifier.AddDocument(doc);
}
}
}
}
// Field.
string field = "number";
// Facet.
IFacetHandler numberFacetHandler = new SimpleFacetHandler(field);
ICollection<IFacetHandler> handlerList = new IFacetHandler[] {
numberFacetHandler};
// Lucene index.
using (Lucene.Net.Store.Directory idx = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)))
{
using (IndexReader reader = IndexReader.Open(idx, true))
{
// Bobo reader.
using (BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, handlerList))
{
string v1 = "01", v2 = "05", v3 = "09";
float b1 = 1.1f, b2 = 0.9f, b3 = 1.0f;
int totalHits, totalHits2;
BrowseResult result, result2;
// Bobo.
{
BrowseRequest browseRequest = new BrowseRequest();
browseRequest.Count = 10;
browseRequest.Offset = 0;
browseRequest.FetchStoredFields = true;
BrowseSelection sel = new BrowseSelection(field);
sel.Values = new string[] { v1, v2, v3 };
browseRequest.AddSelection(sel);
Dictionary<string, float> boostMap = new Dictionary<string, float>();
boostMap.Add(v1, b1);
boostMap.Add(v2, b2);
boostMap.Add(v3, b3);
FacetTermQuery resultQ = new FacetTermQuery(sel, boostMap);
browseRequest.Query = resultQ;
FacetSpec spec = new FacetSpec();
spec.MaxCount = 10;
browseRequest.SetFacetSpec(field, spec);
IBrowsable browser = new BoboBrowser(boboReader);
result = browser.Browse(browseRequest);
totalHits = result.NumHits;
}
// Lucene.
{
BrowseRequest browseRequest = new BrowseRequest();
browseRequest.Count = 10;
browseRequest.Offset = 0;
browseRequest.FetchStoredFields = true;
BooleanQuery resultQ = new BooleanQuery();
TermQuery tq = new TermQuery(new Term(field, v1));
tq.Boost = b1;
resultQ.Add(tq, Occur.SHOULD);
tq = new TermQuery(new Term(field, v2));
tq.Boost = b2;
resultQ.Add(tq, Occur.SHOULD);
tq = new TermQuery(new Term(field, v3));
tq.Boost = b3;
resultQ.Add(tq, Occur.SHOULD);
browseRequest.Query = resultQ;
IBrowsable browser = new BoboBrowser(boboReader);
result2 = browser.Browse(browseRequest);
totalHits2 = result.NumHits;
}
// Check.
Assert.AreEqual(totalHits, totalHits2);
Assert.AreEqual(result.ToString(), result2.ToString());
}
}
}
}