public void Test1Filter() { BrowseRequest request = CreateRequest(1, "prop3"); FacetCountCollectorSource facetCountCollectorSource = attributesFacetHandler.GetFacetCountCollectorSource(request.GetSelection(AttributeHandlerName), request.GetFacetSpec(AttributeHandlerName)); RandomAccessFilter randomAccessFilter = attributesFacetHandler.BuildFilter(request.GetSelection(AttributeHandlerName)); DocIdSetIterator iterator = randomAccessFilter.GetDocIdSet(boboReader).Iterator(); int docId = iterator.NextDoc(); int[] docIds = new int[2]; int i = 0; while (docId != DocIdSetIterator.NO_MORE_DOCS) { docIds[i] = docId; i++; docId = iterator.NextDoc(); } Assert.AreEqual(Arrays.ToString(new int[] { 1, 2 }), Arrays.ToString(docIds)); BrowseResult res = browser.Browse(request); Assert.AreEqual(res.NumHits, 2); IFacetAccessible fa = res.GetFacetAccessor(AttributeHandlerName); IEnumerable <BrowseFacet> facets = fa.GetFacets(); Console.WriteLine(facets); Assert.AreEqual(3, facets.Count()); BrowseFacet facet = facets.Get(0); Assert.AreEqual(1, facet.FacetValueHitCount); }
private IFacetResult CreateFacetResult(IFacetAccessible facet) { var values = facet .GetFacets() .Select(x => new FacetValue(x.Value, x.FacetValueHitCount)); return(new FacetResult(values)); }
public void TestNumberRangeWithInt() { // Field. string field = "number"; // Lucene index. using (IndexReader reader = IndexReader.Open(this._indexDir, true)) { // Bobo reader. using (BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, this._facetHandlers)) { // Request. BrowseRequest browseRequest = new BrowseRequest(); browseRequest.Count = 10; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; // Selection. BrowseSelection sel = new BrowseSelection(field); browseRequest.AddSelection(sel); // Query. MatchAllDocsQuery query = new MatchAllDocsQuery(); // Output. FacetSpec spec = new FacetSpec(); spec.OrderBy = FacetSpec.FacetSortSpec.OrderValueAsc; spec.MaxCount = 10; browseRequest.SetFacetSpec(field, spec); // Browse. IBrowsable browser = new BoboBrowser(boboReader); using (BrowseResult result = browser.Browse(browseRequest)) { // Results. int totalHits = result.NumHits; BrowseHit[] hits = result.Hits; IDictionary <String, IFacetAccessible> facetMap = result.FacetMap; IFacetAccessible facets = facetMap[field]; List <BrowseFacet> facetVals = facets.GetFacets().ToList(); // Check. Assert.AreEqual(10, totalHits); Assert.AreEqual(5, facetVals.Count()); Assert.AreEqual("[0000000000 TO 0000001000](3)", facetVals[0].ToString()); Assert.AreEqual("[0000001000 TO 0000010000](3)", facetVals[1].ToString()); Assert.AreEqual("[0000010000 TO 0000100000](2)", facetVals[2].ToString()); Assert.AreEqual("[0000100000 TO 0001000000](3)", facetVals[3].ToString()); Assert.AreEqual("[0001000000 TO *](3)", facetVals[4].ToString()); } } } }
public void TestPriceRangeWithFloatAndSelection() { // Field. string field = "pricefloat"; // Lucene index. using (DirectoryReader reader = DirectoryReader.Open(this._indexDir)) { // Bobo reader. using (BoboMultiReader boboReader = BoboMultiReader.GetInstance(reader, this._facetHandlers)) { // Request. BrowseRequest browseRequest = new BrowseRequest(); browseRequest.Count = 10; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; // Selection. BrowseSelection sel = new BrowseSelection(field); sel.AddValue("[000000.000 TO 000999.220]"); browseRequest.AddSelection(sel); // Query. MatchAllDocsQuery query = new MatchAllDocsQuery(); // Output. FacetSpec spec = new FacetSpec(); spec.OrderBy = FacetSpec.FacetSortSpec.OrderValueAsc; spec.MaxCount = 10; browseRequest.SetFacetSpec(field, spec); // Browse. IBrowsable browser = new BoboBrowser(boboReader); using (BrowseResult result = browser.Browse(browseRequest)) { // Results. int totalHits = result.NumHits; BrowseHit[] hits = result.Hits; IDictionary <String, IFacetAccessible> facetMap = result.FacetMap; IFacetAccessible facets = facetMap[field]; List <BrowseFacet> facetVals = facets.GetFacets().ToList(); // Check. Assert.AreEqual(7, totalHits); Assert.AreEqual(1, facetVals.Count); Assert.AreEqual("[000000.000 TO 000999.220](7)", facetVals[0].ToString()); } } } }
public static string ToString(IDictionary <string, IFacetAccessible> map) { StringBuilder buffer = new StringBuilder(); buffer.Append("{"); foreach (KeyValuePair <string, IFacetAccessible> entry in map) { string name = entry.Key; IFacetAccessible facetAccessor = entry.Value; buffer.Append("name=").Append(name).Append(","); buffer.Append("facets=").Append(ToString(facetAccessor.GetFacets())).Append(";"); } buffer.Append("}").AppendLine(); return(buffer.ToString()); }
public void TestMultiValPath() { DirectoryReader reader = DirectoryReader.Open(directory); BoboMultiReader boboReader = BoboMultiReader.GetInstance(reader, facetHandlers); BoboBrowser browser = new BoboBrowser(boboReader); BrowseRequest req = new BrowseRequest(); BrowseSelection sel = new BrowseSelection(PathHandlerName); sel.AddValue("/a"); var propMap = new Dictionary <String, String>(); propMap.Put(PathFacetHandler.SEL_PROP_NAME_DEPTH, "0"); propMap.Put(PathFacetHandler.SEL_PROP_NAME_STRICT, "false"); sel.SetSelectionProperties(propMap); req.AddSelection(sel); FacetSpec fs = new FacetSpec(); fs.MinHitCount = (1); req.SetFacetSpec(PathHandlerName, fs); BrowseResult res = browser.Browse(req); Assert.AreEqual(res.NumHits, 1); IFacetAccessible fa = res.GetFacetAccessor(PathHandlerName); ICollection <BrowseFacet> facets = fa.GetFacets(); Console.WriteLine(facets); Assert.AreEqual(1, facets.Count); BrowseFacet facet = facets.Get(0); Assert.AreEqual(2, facet.FacetValueHitCount); }
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; }