Created
December 20, 2014 13:16
-
-
Save abriggs-eduserv/c23f4a0ffc28b5afebd5 to your computer and use it in GitHub Desktop.
Complete demo MacroPartial from 24days.in/umbraco article
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
### Great