Skip to content

Instantly share code, notes, and snippets.

@abriggs-eduserv
Created December 20, 2014 13:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abriggs-eduserv/c23f4a0ffc28b5afebd5 to your computer and use it in GitHub Desktop.
Save abriggs-eduserv/c23f4a0ffc28b5afebd5 to your computer and use it in GitHub Desktop.
Complete demo MacroPartial from 24days.in/umbraco article
@using BoboBrowse.Api
@using BoboBrowse.Facets
@using BoboBrowse.Facets.impl
@using Examine;
@using Examine.LuceneEngine.Providers
@using Lucene.Net.Search
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
// creating a browse request
var browseRequest = new BrowseRequest
{
Count = 10, // Page size
Offset = 0, // Page size * Page Number
FetchStoredFields = true, // Fetch data from stored fields
Sort = new[] { new SortField("updateDate", 3, true) }
};
// read facet selections from the form post
foreach(string key in Request.Form) {
if(!key.StartsWith("facet_")) {
continue;
}
var facet = key.Substring(6);
// add a selection
BrowseSelection sel = new BrowseSelection(facet);
sel.AddValue(Request.Form[key]);
browseRequest.AddSelection(sel);
}
// parse a query
var query = Request["q"];
if(!string.IsNullOrEmpty(query)) {
var parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "bodyText", new Lucene.Net.Analysis.KeywordAnalyzer());
Query q = parser.Parse(query);
browseRequest.Query = q;
}
ICollection<FacetHandler> handlerList = new List<FacetHandler>();
// define the facet output spec used for all facets
var facetSpec = new FacetSpec { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc, ExpandSelection = true };
// Add a facet
var fieldName = "category";
handlerList.Add(new SimpleFacetHandler(fieldName));
browseRequest.SetFacetSpec(fieldName, facetSpec);
var searchProvider = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"] as LuceneSearcher;
var searcher = (IndexSearcher)searchProvider.GetSearcher();
var reader = searcher.GetIndexReader();
// decorate lucene reader with a bobo index reader
BoboIndexReader boboReader = BoboIndexReader.GetInstance(reader, handlerList);
// perform browse
IBrowsable browser = new BoboBrowser(boboReader);
var results = browser.Browse(browseRequest);
// create collection of Umbraco NodeIds from Hits.
var resultNodeIds = results.Hits.Select(x => x.StoredFields.Get("id")).ToList();
}
<form method="post">
<div class="row">
<div class="9u">
<label for="q">Search</label>
<input name="q" id="q" value="@Request["q"]" />
<input type="submit" value="Search" />
</div>
</div>
<div class="row">
<div class="3u">
@foreach (var facet in results.FacetMap)
{
<h4>@facet.Key</h4>
<ul>
@foreach (var facetValue in facet.Value.GetFacets())
{
var chck = (Request["facet_" + facet.Key] ?? string.Empty).Contains(@facetValue.Value.ToString()) ? "selected" : null;
<li><label><input type="checkbox" name="facet_@facet.Key" value="@facetValue.Value" checked="@chck" />@facetValue.Value</label>: @facetValue.HitCount</li>
}
</ul>
}
<input type="submit" value="Update" />
</div>
<div class="6u">
<ul>
@foreach (var resultNodeId in resultNodeIds)
{
var node = Umbraco.Content(resultNodeId);
<li><a href="@node.Url">@node.Name</a></li>
}
</ul>
</div>
</div>
</form>
@irving-frias
Copy link

### Great

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment