Example #1
0
        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"));
            }
        }
Example #2
0
        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;
        }