public void TestLogging() { // Set up a simple Log4Net configuration that logs in memory. var memAppend = new log4net.Appender.MemoryAppender(); #if NETCOREAPP1_0 var repository = LogManager.GetRepository(Assembly.GetEntryAssembly()); BasicConfigurator.Configure(repository, memAppend); #else BasicConfigurator.Configure(memAppend); #endif BrowseRequest br = new BrowseRequest(); br.Count = 20; br.Offset = 0; BrowseSelection colorSel = new BrowseSelection("mycolor"); colorSel.AddValue("yellow"); br.AddSelection(colorSel); BrowseSelection makeSel = new BrowseSelection("make"); makeSel.AddValue("rav4"); br.AddSelection(makeSel); FacetSpec spec = new FacetSpec(); spec.ExpandSelection = true; spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; spec.MaxCount = 15; br.SetFacetSpec("mycolor", spec); br.SetFacetSpec("id", spec); br.SetFacetSpec("make", spec); Directory ramIndexDir = CreateIndex(); using (DirectoryReader srcReader = DirectoryReader.Open(ramIndexDir)) { using (BoboMultiReader boboReader = BoboMultiReader.GetInstance(srcReader, _facetHandlers)) { using (BoboBrowser boboBrowser = new BoboBrowser(boboReader)) { using (BrowseResult result = boboBrowser.Browse(br)) { } } } } var events = memAppend.GetEvents(); Assert.AreEqual(3, events.Length); StringAssert.StartsWith("facetHandler loaded: id, took:", events[0].RenderedMessage); StringAssert.StartsWith("facetHandler loaded: make, took:", events[1].RenderedMessage); StringAssert.StartsWith("facetHandler loaded: mycolor, took:", events[2].RenderedMessage); }
public void TestNotValuesForSimpleFacetHandler() { BrowseRequest br = new BrowseRequest(); br.Count = 20; br.Offset = 0; BrowseSelection colorSel = new BrowseSelection("color"); colorSel.AddValue("red"); br.AddSelection(colorSel); BrowseSelection idSel = new BrowseSelection("id"); idSel.AddNotValue("0"); br.AddSelection(idSel); BrowseResult result = null; BoboBrowser boboBrowser = null; int expectedHitNum = (_documentSize / 2) - 1; using (Directory ramIndexDir = CreateIndex()) { using (IndexReader srcReader = IndexReader.Open(ramIndexDir, true)) { using (boboBrowser = new BoboBrowser(BoboIndexReader.GetInstance(srcReader, _facetHandlers, null))) { result = boboBrowser.Browse(br); Assert.AreEqual(expectedHitNum, result.NumHits); StringBuilder buffer = new StringBuilder(); BrowseHit[] hits = result.Hits; for (int i = 0; i < hits.Length; ++i) { int expectedID = (i + 1) * 2; Assert.AreEqual(expectedID, int.Parse(hits[i].GetField("id"))); if (i != 0) { buffer.Append('\n'); } buffer.Append("id=" + hits[i].GetField("id") + "," + "color=" + hits[i].GetField("color")); } log.Info(buffer.ToString()); } } } }
public void TestFacetNameForSimpleFacetHandler() { BrowseRequest br = new BrowseRequest(); br.Count = 20; br.Offset = 0; BrowseSelection colorSel = new BrowseSelection("mycolor"); colorSel.AddValue("yellow"); br.AddSelection(colorSel); BrowseSelection makeSel = new BrowseSelection("make"); makeSel.AddValue("rav4"); br.AddSelection(makeSel); FacetSpec spec = new FacetSpec(); spec.ExpandSelection = true; spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; spec.MaxCount = 15; br.SetFacetSpec("mycolor", spec); br.SetFacetSpec("id", spec); br.SetFacetSpec("make", spec); int expectedHitNum = 3; Directory ramIndexDir = CreateIndex(); using (DirectoryReader srcReader = DirectoryReader.Open(ramIndexDir)) { using (BoboMultiReader boboReader = BoboMultiReader.GetInstance(srcReader, _facetHandlers)) { using (BoboBrowser boboBrowser = new BoboBrowser(boboReader)) { using (BrowseResult result = boboBrowser.Browse(br)) { Assert.AreEqual(expectedHitNum, result.NumHits); } } } } }
/// <summary> /// Creates a browser request from the passed in key value pair query string /// </summary> /// <param name="querystring"></param> /// <param name="page"></param> /// <param name="useOffset"></param> /// <param name="itemsPerPage"></param> /// <returns></returns> public virtual BrowseRequest CreateBrowseRequest(List <KeyValuePair <string, string> > querystring, int?page = null, bool useOffset = false, int itemsPerPage = 10) { Query query = null; var compiledQuery = BuildBaseQuery(querystring); if (compiledQuery != null) { var luceneParams = compiledQuery as LuceneSearchCriteria; query = luceneParams?.Query ?? throw new ArgumentException("Provided ISearchCriteria dos not match the allowed ISearchCriteria. Ensure you only use an ISearchCriteria created from the current SearcherProvider"); } var offset = 0; if (!page.HasValue) { page = 1; } var count = page.Value * itemsPerPage; if (useOffset) { offset = (page.Value - 1) * itemsPerPage; count = itemsPerPage; } var browseRequest = new BrowseRequest { Offset = offset, Count = count, Query = query, FetchStoredFields = true, Sort = DetermineSort(querystring) }; var facetSelection = QueryStringParser.ParseQueryString(querystring, FacetFields); foreach (var facetField in facetSelection) { if (facetField.Value.Any()) { var sel = new BrowseSelection(facetField.Key.Alias.FacetFieldAlias()); foreach (var selection in facetField.Value) { if (!string.IsNullOrEmpty(selection)) { sel.AddValue(selection); } } sel.SelectionOperation = facetField.Key.SelectionOperation; browseRequest.AddSelection(sel); } } return(browseRequest); }
/// <summary> /// Creates a browser request from the passed in key value pair query string to handle a multirequest(ex. 2x f_category in query) /// </summary> /// <param name="querystring"></param> /// <param name="page"></param> /// <param name="useOffset"></param> /// <param name="itemsPerPage"></param> /// <returns></returns> public virtual BrowseRequest CreateMultiBrowseRequest(List <KeyValuePair <string, string> > querystring, int?page = null, bool useOffset = false, int itemsPerPage = 10) { Query query = null; var compiledQuery = BuildBaseQuery(querystring); if (compiledQuery != null) { var luceneParams = compiledQuery as LuceneSearchCriteria; query = luceneParams?.Query ?? throw new ArgumentException("Provided ISearchCriteria dos not match the allowed ISearchCriteria. Ensure you only use an ISearchCriteria created from the current SearcherProvider"); } var offset = 0; if (!page.HasValue) { page = 1; } var count = page.Value * itemsPerPage; if (useOffset) { offset = (page.Value - 1) * itemsPerPage; count = itemsPerPage; } var browseRequest = new BrowseRequest { Offset = offset, Count = count, Query = query, FetchStoredFields = true, Sort = DetermineSort(querystring) }; var queryStringKeys = querystring.Select(x => x.Key); foreach (var facetField in FacetFields.Where(x => queryStringKeys.Contains(x.Alias.FacetFieldAlias()))) { var facetKvps = querystring.Where(x => x.Key == facetField.Alias.FacetFieldAlias()); foreach (var facetKvp in facetKvps) { var facetValue = facetKvp.Value; if (!string.IsNullOrWhiteSpace(facetValue)) { var sel = browseRequest.GetSelection(facetKvp.Key) ?? new BrowseSelection(facetKvp.Key); sel.AddValue(facetValue); sel.SelectionOperation = facetField.SelectionOperation; browseRequest.RemoveSelection(facetKvp.Key); browseRequest.AddSelection(sel); } } } return(browseRequest); }
/// <summary> /// Adds facet constraints to a browse request. /// </summary> /// <param name="br">The browse request.</param> /// <param name="facetConstraintsSet">The facet constraints for this request.</param> private void AddFacetConstraints(BrowseRequest br, IEnumerable <FacetConstraints> facetConstraintsSet) { // add facet constraints specified in query to the browse request foreach (var facetConstraints in facetConstraintsSet) { if (this.config.IsFacetConfigured(facetConstraints.FacetName)) { var bs = br.GetSelection(facetConstraints.FacetName) ?? new BrowseSelection(facetConstraints.FacetName); foreach (var constraint in facetConstraints.Constraints) { bs.AddValue(constraint); } br.AddSelection(bs); } } }
public void AddSelection(string name, string val, bool isNot) { BrowseSelection sel = m_req.GetSelection(name); if (sel == null) { sel = new BrowseSelection(name); } if (isNot) { sel.AddNotValue(val); } else { sel.AddValue(val); } m_req.AddSelection(sel); }
public BrowseRequest CreateRequest(int minHitCount, BrowseSelection.ValueOperation operation, params string[] terms) { BrowseRequest req = new BrowseRequest(); BrowseSelection sel = new BrowseSelection(AttributeHandlerName); foreach (String term in terms) { sel.AddValue(term); } sel.SetSelectionProperties(selectionProperties); sel.SelectionOperation = (operation); req.AddSelection(sel); req.Count = (50); FacetSpec fs = new FacetSpec(); fs.MinHitCount = (minHitCount); req.SetFacetSpec(AttributeHandlerName, fs); return(req); }
public void TestNotValuesForRangeFacetHandler() { Console.WriteLine("TestNotValuesForRangeFacetHandler"); BrowseResult result = null; BoboBrowser boboBrowser = null; using (Directory ramIndexDir = CreateIndexTwo()) { using (IndexReader srcReader = IndexReader.Open(ramIndexDir, true)) { using (boboBrowser = new BoboBrowser(BoboIndexReader.GetInstance(srcReader, _facetHandlers, null))) { BrowseRequest br = new BrowseRequest(); br.Count = (20); br.Offset = (0); if (_idRanges == null) { log.Error("_idRanges cannot be null in order to test NOT on RangeFacetHandler"); } BrowseSelection idSel = new BrowseSelection("idRange"); //int rangeIndex = 2; // Not used idSel.AddNotValue(_idRanges[0]); int expectedHitNum = 1; br.AddSelection(idSel); BooleanQuery q = new BooleanQuery(); q.Add(NumericRangeQuery.NewIntRange("NUM", 10, 10, true, true), Occur.MUST_NOT); q.Add(new MatchAllDocsQuery(), Occur.MUST); br.Query = q; result = boboBrowser.Browse(br); Assert.AreEqual(expectedHitNum, result.NumHits); for (int i = 0; i < result.NumHits; i++) { Console.WriteLine(result.Hits[i]); } } } } }
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; }
public BrowseRequest CreateRequest(int minHitCount, BrowseSelection.ValueOperation operation, params string[] terms) { BrowseRequest req = new BrowseRequest(); BrowseSelection sel = new BrowseSelection(AttributeHandlerName); foreach (String term in terms) { sel.AddValue(term); } sel.SetSelectionProperties(selectionProperties); sel.SelectionOperation = (operation); req.AddSelection(sel); req.Count = (50); FacetSpec fs = new FacetSpec(); fs.MinHitCount = (minHitCount); req.SetFacetSpec(AttributeHandlerName, fs); return req; }
public BrowseRequest ConvertBrowseRequest(BoboRequest boboRequest) { Query query = this.queryBuilder.ParseQuery(boboRequest.Query, boboRequest.Df); Sort sort = this.queryBuilder.ParseSort(boboRequest.Sort); var browseRequest = new BrowseRequest(); browseRequest.Offset = boboRequest.Start; browseRequest.Count = boboRequest.Rows; browseRequest.Query = query; if (sort != null) { SortField[] sortFields = sort.GetSort(); if (sortFields != null && sortFields.Length > 0) { browseRequest.Sort = sortFields; } } var selMap = new Dictionary <string, BrowseSelection>(); foreach (var selection in boboRequest.Selections) { BrowseSelection sel = selMap.ContainsKey(selection.Name) ? selMap[selection.Name] : null; if (sel == null) { sel = new BrowseSelection(selection.Name); selMap.Add(selection.Name, sel); } foreach (var val in selection.Values) { sel.AddValue(val); } sel.SelectionOperation = selection.SelectionOperation; sel.SetSelectionProperty("depth", selection.Depth.ToString()); sel.SetSelectionProperty("strict", selection.Strict.ToString().ToLower()); } if (selMap.Count > 0) { var sels = selMap.Values; foreach (var sel in sels) { browseRequest.AddSelection(sel); } } if (boboRequest.Facet == true) { foreach (var facet in boboRequest.Facets) { FacetSpec fspec = new FacetSpec(); browseRequest.SetFacetSpec(facet.Name, fspec); fspec.MinHitCount = facet.MinCount == int.MinValue ? 0 : facet.MinCount; fspec.MaxCount = facet.Limit == int.MinValue ? 100 : facet.Limit; fspec.ExpandSelection = facet.Expand; fspec.OrderBy = ParseFacetSort(facet.Sort, FacetSpec.FacetSortSpec.OrderHitsDesc); } } return(browseRequest); }
private BrowseResult PerformSearch(Query query, string indexPath, IEnumerable<Models.SelectionGroup> selectionGroups) { string[] FieldNames = new string[] { "Material", "Style", "Mounting", "Brand" }; var handlers = new List<FacetHandler>(); foreach (string field in FieldNames) { handlers.Add(new SimpleFacetHandler(field)); } // Run the search // create the index reader var directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)); var indexReader = DirectoryReader.Open(directory, true); //// This is how to get a searcher for executing the search, not for working with facets //IndexSearcher indexSearcher = new IndexSearcher(directory, true); //indexSearcher.Search( // Decorate it with the Bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(indexReader, handlers); // create a browse request BrowseRequest browseRequest = new BrowseRequest(); // NOTE: these must be used in production to page the results browseRequest.Count = 50; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; //Query query = new QueryParser( // Lucene.Net.Util.Version.LUCENE_29, // "title", // new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29) // ).Parse(model.Phrase); if (selectionGroups != null) { // Add the selections to the search foreach (var group in selectionGroups) { BrowseSelection sel = new BrowseSelection(group.Name); foreach (var value in group.Selections) { sel.AddValue(value); } browseRequest.AddSelection(sel); } } browseRequest.Query = query; //// add the facet output specs //FacetSpec brandSpec = new FacetSpec(); //brandSpec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; //browseRequest.SetFacetSpec("Brand", brandSpec); foreach (var name in FieldNames) { // add the facet output specs FacetSpec spec = new FacetSpec(); //spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; // NOTE: if this is a secondary search, we want to get the facets with 0 // hits so the checkboxes can be set on the UI...or otherwise program the UI // to disable and set to 0 all of the selections that aren't in the result if (selectionGroups != null) { spec.MinHitCount = 0; } browseRequest.SetFacetSpec(name, spec); } // perform browse IBrowsable browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(browseRequest); return result; }
private BrowseResult PerformAutoCompleteLookup(string prefix, string indexPath) { FacetHandler handler = new MultiValueFacetHandler("title"); Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)); IndexReader indexReader = IndexReader.Open(directory, true); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(indexReader, new FacetHandler[] { handler }); BrowseRequest browseRequest = new BrowseRequest(); browseRequest.Count = 8; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; // add a selection BrowseSelection sel = new BrowseSelection("title"); //sel.AddValue("alexey"); browseRequest.AddSelection(sel); // parse a query // NOTE: this was "Entity" originally QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", new KeywordAnalyzer()); Query q = parser.Parse("SPListItem"); browseRequest.Query = q; // add the facet output specs FacetSpec spec = new FacetSpec(); spec.Prefix = prefix; spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; browseRequest.SetFacetSpec("title", spec); // perform browse IBrowsable browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(browseRequest); return result; //// Showing results now //Dictionary<String, IFacetAccessible> facetMap = result.FacetMap; //IFacetAccessible colorFacets = facetMap["Body"]; //IEnumerable<BrowseFacet> facetVals = colorFacets.GetFacets(); //Debug.WriteLine("Facets:"); //int count = 0; //foreach (BrowseFacet facet in facetVals) //{ // count++; // Debug.WriteLine(facet.ToString()); //} //Debug.WriteLine("Total = " + count); }