static void Main(string[] args) { Lucene.Net.Util.Version version = Lucene.Net.Util.Version.LUCENE_29; var dir = new RAMDirectory(); Analyzer analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), new Dictionary <string, Analyzer> { { "organization", new KeywordAnalyzer() } }); // Add content to the index var indexWriter = new IndexWriter(dir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED); foreach (var document in CreateDocuments(CreateTestData())) { indexWriter.AddDocument(document); } indexWriter.Commit(); indexWriter.Dispose(); var orgFieldName = "organization"; var titleFieldName = "title"; var createdAtName = "created_at"; var rangeFacetName = "rangeFacet"; //var orgFacetHandler = new PathFacetHandler(orgFieldName); //orgFacetHandler.SetSeparator("/"); var orgFacetHandler = new MultiValueFacetHandler(orgFieldName); FacetHandler titleFacetHandler = new MultiValueFacetHandler(titleFieldName); var createdAtFacetHandler = new SimpleFacetHandler(createdAtName); //var ranges = new List<string> { "[2000/01/01 TO 2000/12/30]", "[2001/01/01 TO 2007/12/30]" }; var ranges = new List <string> { "[20000101 TO 20001230]", "[20040101 TO *]" }; var rangeFacetHandler = new RangeFacetHandler(rangeFacetName, createdAtName, ranges); IndexReader reader = IndexReader.Open(dir, true); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, new[] { orgFacetHandler, titleFacetHandler, createdAtFacetHandler, rangeFacetHandler }); // creating a browse request var browseRequest = new BrowseRequest { Count = 10, Offset = 0, FetchStoredFields = true }; // add a selection //var orgSelection = new BrowseSelection(orgFieldName); //orgSelection.AddValue("A/B"); //browseRequest.AddSelection(orgSelection); var titleSelction = new BrowseSelection(titleFieldName); //titleSelction.AddValue("Læge"); browseRequest.AddSelection(titleSelction); browseRequest.AddSelection(new BrowseSelection(rangeFacetName)); // parse a query var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "name", new KeywordAnalyzer()); Query q = parser.Parse("an*"); browseRequest.Query = q; // add the facet output specs var orgSpec = new FacetSpec { OrderBy = FacetSpec.FacetSortSpec.OrderValueAsc }; browseRequest.SetFacetSpec(orgFieldName, orgSpec); var titleSpec = new FacetSpec { MinHitCount = 1, OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; browseRequest.SetFacetSpec(titleFieldName, titleSpec); //var createdAtSpec = new FacetSpec { MinHitCount = 1, OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; //browseRequest.SetFacetSpec(createdAtName, createdAtSpec); var rangeSpec = new FacetSpec { MinHitCount = 1, OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; browseRequest.SetFacetSpec(rangeFacetName, rangeSpec); // perform browse IBrowsable browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(browseRequest); // Showing results now int totalHits = result.NumHits; BrowseHit[] hits = result.Hits; Dictionary <String, IFacetAccessible> facetMap = result.FacetMap; IFacetAccessible orgFacets = facetMap[orgFieldName]; Console.WriteLine("Facets {0}:", orgFieldName); foreach (BrowseFacet facet in orgFacets.GetFacets()) { Console.WriteLine(facet.ToString()); } IFacetAccessible titleFacets = facetMap[titleFieldName]; Console.WriteLine("Facets {0}:", titleFieldName); foreach (BrowseFacet facet in titleFacets.GetFacets()) { Console.WriteLine(facet.ToString()); } if (facetMap.ContainsKey(createdAtName)) { IFacetAccessible createdAtFacets = facetMap[createdAtName]; Console.WriteLine("Facets {0}:", createdAtName); foreach (BrowseFacet facet in createdAtFacets.GetFacets()) { Console.WriteLine(facet.ToString()); } } if (facetMap.ContainsKey(rangeFacetName)) { Console.WriteLine("-------------------------------------"); IFacetAccessible rangeFacets = facetMap[rangeFacetName]; Console.WriteLine("Facets {0}:", rangeFacets); foreach (BrowseFacet facet in rangeFacets.GetFacets()) { Console.WriteLine(facet.ToString()); } Console.WriteLine("-------------------------------------"); } Console.WriteLine("Actual items (total: {0}) query: {1}:", totalHits, q); for (int i = 0; i < hits.Length; ++i) { BrowseHit browseHit = hits[i]; Console.WriteLine("id = {0}, Name = {1}, Organizations = {{{2}}}, Titles = {{{3}}}, Created at = {4}", browseHit.StoredFields.Get("id"), browseHit.StoredFields.Get("name"), string.Join(", ", browseHit.StoredFields.GetValues("organization").Distinct()), string.Join(", ", browseHit.StoredFields.GetValues("title").Distinct()), browseHit.StoredFields.Get("created_at")); } }
public void testRuntimeFilteredDateRange() { Lucene.Net.Util.Version version = Lucene.Net.Util.Version.LUCENE_29; var dir = new RAMDirectory(); Analyzer analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), new Dictionary <string, Analyzer> { { "organization", new KeywordAnalyzer() } }); // Add content to the index var indexWriter = new IndexWriter(dir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED); foreach (var document in CreateDocuments()) { indexWriter.AddDocument(document); } indexWriter.Commit(); indexWriter.Dispose(); //var ranges = new List<string> { "[2000/01/01 TO 2001/12/30]", "[2007/01/01 TO 2007/12/30]" }; ////var handler = new FilteredRangeFacetHandler("filtered_date", "date", ranges); //var handler = new RangeFacetHandler("date", new PredefinedTermListFactory<DateTime>("yyyy/MM/dd"), ranges); //IndexReader reader = IndexReader.Open(dir, true); //// decorate it with a bobo index reader //BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, new[] { handler }); //IBrowsable browser = new BoboBrowser(boboReader); //var req = new BrowseRequest(); //req.SetFacetSpec("filtered_date", new FacetSpec()); //BrowseResult result = browser.Browse(req); //// Showing results now //int totalHits = result.NumHits; //BrowseHit[] hits = result.Hits; //Dictionary<String, IFacetAccessible> facetMap = result.FacetMap; // queries var dateRange = new List <String>(); dateRange.Add("[" + DateTools.DateToString(new DateTime(1999, 1, 1), DateTools.Resolution.DAY) + " TO " + DateTools.DateToString(new DateTime(2000, 12, 30), DateTools.Resolution.DAY) + "]"); dateRange.Add("[" + DateTools.DateToString(new DateTime(2001, 1, 1), DateTools.Resolution.DAY) + " TO *]"); // color facet handler var dateHandler = new RangeFacetHandler("date", dateRange); var titleFacet = new SimpleFacetHandler("title"); var handlerList = new List <FacetHandler>() { dateHandler, titleFacet }; // opening a lucene index IndexReader reader = IndexReader.Open(dir); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, handlerList); // creating a browse request var br = new BrowseRequest { Count = 10, Offset = 0 }; // add a selection BrowseSelection sel = new BrowseSelection("title"); //sel.AddValue("bodyintitle"); br.AddSelection(sel); // parse a query var parser = new QueryParser(version, "id", new StandardAnalyzer(version)); Query q = parser.Parse("*:*"); br.Query = q; // add the facet output specs FacetSpec dateSpec = new FacetSpec(); dateSpec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; br.SetFacetSpec("date", dateSpec); FacetSpec titleSpec = new FacetSpec(); titleSpec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; br.SetFacetSpec("title", titleSpec); // perform browse var browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(br); int totalHits = result.NumHits; BrowseHit[] hits = result.Hits; Dictionary <String, IFacetAccessible> facetMap = result.FacetMap; IFacetAccessible dateFacets = facetMap["date"]; Debug.WriteLine("Facets date:"); foreach (BrowseFacet facetVal in dateFacets.GetFacets()) { Debug.WriteLine("Facet " + facetVal.Value + "(" + facetVal.HitCount + ")"); } IFacetAccessible orgFacets = facetMap["title"]; Debug.WriteLine("Facets title:"); foreach (BrowseFacet facet in orgFacets.GetFacets()) { Debug.WriteLine(facet.ToString()); } int i = 42; }