public FacetOrFilter(IFacetHandler facetHandler, string[] vals, bool takeCompliment, IFacetValueConverter valueConverter) { _facetHandler = facetHandler; _vals = vals; _takeCompliment = takeCompliment; _valueConverter = valueConverter; }
public void TestAutoComplete() { var query = new MatchAllDocsQuery(); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var request = new BrowseRequest() { Count = 10, Offset = 0, Query = query }; //var prefix = "java"; // NightOwl888: Prefix is no longer a feature //Console.WriteLine(string.Format("prefix:{0}", prefix)); //Console.WriteLine("============================="); var faceHandlers = new IFacetHandler[] { new SimpleFacetHandler("name") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), faceHandlers)); var factSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; request.SetFacetSpec("name", factSpec); var result = browser.Browse(request); foreach (var facet in result.FacetMap["name"].GetFacets()) { Console.WriteLine(facet.ToString()); } }
/// <summary> /// Sets a facet handler for each sub-browser instance. /// </summary> /// <param name="facetHandler">A facet handler.</param> public virtual void SetFacetHandler(IFacetHandler facetHandler) { foreach (IBrowsable subBrowser in m_subBrowsers) { subBrowser.SetFacetHandler(facetHandler); } }
public override Explanation Explain(AtomicReaderContext context, int docid) { BoboSegmentReader boboReader = (BoboSegmentReader)context.Reader; IFacetHandler fhandler = boboReader.GetFacetHandler(m_parent.m_name); if (fhandler != null) { BoboDocScorer scorer = null; if (fhandler is IFacetScoreable) { scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, m_parent.m_scoringFactory, m_parent.m_boostMap); Explanation exp1 = scorer.Explain(docid); Explanation exp2 = new Explanation(m_parent.Boost, "boost"); Explanation expl = new Explanation(); expl.Description = "product of:"; expl.Value = (exp1.Value * exp2.Value); expl.AddDetail(exp1); expl.AddDetail(exp2); return(expl); } else { return(null); } } return(null); }
public FacetBasedBoostingScorer(FacetBasedBoostScorerBuilder parent, BoboSegmentReader reader, Scorer innerScorer) : base(innerScorer.Weight) { m_innerScorer = innerScorer; List <BoboDocScorer> list = new List <BoboDocScorer>(); foreach (var boostEntry in parent.m_boostMaps) { string facetName = boostEntry.Key; IFacetHandler handler = reader.GetFacetHandler(facetName); if (!(handler is IFacetScoreable)) { throw new ArgumentException(facetName + " does not implement IFacetScoreable"); } IFacetScoreable facetScoreable = (IFacetScoreable)handler; BoboDocScorer scorer = facetScoreable.GetDocScorer(reader, parent.m_scoringFunctionFactory, boostEntry.Value); if (scorer != null) { list.Add(scorer); } } m_facetScorers = list.ToArray(); m_docid = -1; }
public FacetOrFilter(IFacetHandler facetHandler, string[] vals, bool takeCompliment, IFacetValueConverter valueConverter) { _facetHandler = facetHandler; _vals = vals; _takeCompliment = takeCompliment; _valueConverter = valueConverter; }
public MultiValueORFacetFilter(IFacetHandler facetHandler, string[] vals, IFacetValueConverter valueConverter, bool takeCompliment) { _facetHandler = facetHandler; _vals = vals; _valueConverter = valueConverter; _takeCompliment = takeCompliment; }
public MultiValueORFacetFilter(IFacetHandler facetHandler, string[] vals, IFacetValueConverter valueConverter, bool takeCompliment) { m_facetHandler = facetHandler; m_vals = vals; m_valueConverter = valueConverter; m_takeCompliment = takeCompliment; }
public BucketFacetCountCollectorSource(string name, BrowseSelection sel, FacetSpec ospec, IDictionary <string, string[]> predefinedBuckets, IFacetHandler dependOnFacetHandler) { m_name = name; m_sel = sel; m_ospec = ospec; m_predefinedBuckets = predefinedBuckets; m_dependOnFacetHandler = dependOnFacetHandler; }
/// <summary> /// Sets a facet handler for each sub-browser instance. /// </summary> /// <param name="facetHandler">A facet handler.</param> public virtual void SetFacetHandler(IFacetHandler facetHandler) { IBrowsable[] subBrowsers = GetSubBrowsers(); foreach (IBrowsable subBrowser in subBrowsers) { subBrowser.SetFacetHandler(facetHandler); } }
/// <summary>Gets a facet handler</summary> /// <param name="fieldName">name</param> /// <returns>facet handler</returns> public virtual IFacetHandler GetFacetHandler(string fieldName) { IFacetHandler f = m_facetHandlerMap.Get(fieldName); if (f == null) { f = (IFacetHandler)this.GetRuntimeFacetHandler(fieldName); } return(f); }
/// <summary> /// Gets a facet handler by facet name. /// </summary> /// <param name="name">The facet name.</param> /// <returns>The facet handler instance.</returns> public virtual IFacetHandler GetFacetHandler(string name) { foreach (IBrowsable subBrowser in m_subBrowsers) { IFacetHandler subHandler = subBrowser.GetFacetHandler(name); if (subHandler != null) { return(subHandler); } } return(null); }
public override FacetDataNone Load(BoboSegmentReader reader) { m_dataFacetHandler = reader.GetFacetHandler(m_dataHandlerName); if (m_dataFacetHandler is RangeFacetHandler) { if (((RangeFacetHandler)m_dataFacetHandler).HasPredefinedRanges) { throw new NotSupportedException("underlying range facet handler should not have the predefined ranges"); } } return(FacetDataNone.Instance); }
public bool SkipProcess(IFacetHandler facetHandler, IBase baseObject, Facet facet, IGeneratorConfiguration generatorConfiguration) { if (facetHandler.GetType().Name == "WebAPIStartupGraphQLSchemasFacetHandler") { return(baseObject.Name == "RipleyEntities"); } else if (facetHandler.GetType().Name == "WebAPIModelFacetHandler") { return(baseObject.ID == "/Model[@Model='HydraDevOps']/Entity_Container[@Container='HydraDevOpsContext']/Entity_Set[@EntitySet='Projects']/EntityType[@Entity='Project']"); } return(false); }
public override FacetDataNone Load(BoboSegmentReader reader) { IFacetHandler handler = reader.GetFacetHandler(m_inner); if (handler is RangeFacetHandler) { m_innerHandler = (RangeFacetHandler)handler; return(FacetDataNone.Instance); } else { throw new IOException("inner handler is not instance of RangeFacetHandler"); } }
public override RandomAccessFilter BuildRandomAccessFilter(string value, IDictionary <string, string> selectionProperty) { RandomAccessFilter retFilter = EmptyFilter.Instance; ComboSelection comboSel = ComboSelection.Parse(value, _separator); if (comboSel != null) { IFacetHandler handler = GetDependedFacetHandler(comboSel.Name); if (handler != null) { retFilter = handler.BuildRandomAccessFilter(comboSel.Value, selectionProperty); } } return(retFilter); }
public override int GetNumItems(BoboSegmentReader reader, int id) { IEnumerable <string> dependsOn = this.DependsOn; int count = 0; foreach (string depends in dependsOn) { IFacetHandler facetHandler = GetDependedFacetHandler(depends); string[] fieldValues = facetHandler.GetFieldValues(reader, id); if (fieldValues != null) { count++; } } return(count); }
public override FacetDataNone Load(BoboSegmentReader reader) { m_facetHandlers = new List <SimpleFacetHandler>(m_fieldsSet.Count); m_facetHandlerMap = new Dictionary <string, SimpleFacetHandler>(m_fieldsSet.Count); foreach (string name in m_fieldsSet) { IFacetHandler handler = reader.GetFacetHandler(name); if (handler == null || !(handler is SimpleFacetHandler)) { throw new InvalidOperationException("only simple facet handlers supported"); } SimpleFacetHandler sfh = (SimpleFacetHandler)handler; m_facetHandlers.Add(sfh); m_facetHandlerMap.Add(name, sfh); } return(FacetDataNone.Instance); }
public override RandomAccessFilter BuildRandomAccessOrFilter(string[] vals, IDictionary <string, string> prop, bool isNot) { IDictionary <string, IList <string> > valMap = ConvertMap(vals, _separator); List <RandomAccessFilter> filterList = new List <RandomAccessFilter>(); foreach (var entry in valMap) { string name = entry.Key; IFacetHandler facetHandler = GetDependedFacetHandler(name); if (facetHandler == null) { continue; } IList <string> selVals = entry.Value; if (selVals == null || selVals.Count == 0) { continue; } RandomAccessFilter f = facetHandler.BuildRandomAccessOrFilter(selVals.ToArray(), prop, isNot); if (f == EmptyFilter.Instance) { continue; } filterList.Add(f); } if (filterList.Count == 0) { return(EmptyFilter.Instance); } if (filterList.Count == 1) { return(filterList.Get(0)); } if (isNot) { return(new RandomAccessAndFilter(filterList)); } else { return(new RandomAccessOrFilter(filterList)); } }
public override string[] GetFieldValues(BoboIndexReader reader, int id) { IEnumerable <string> dependsOn = this.DependsOn; List <string> valueList = new List <string>(); foreach (string depends in dependsOn) { IFacetHandler facetHandler = GetDependedFacetHandler(depends); string[] fieldValues = facetHandler.GetFieldValues(reader, id); foreach (string fieldVal in fieldValues) { StringBuilder buf = new StringBuilder(); buf.Append(depends).Append(_separator).Append(fieldVal); valueList.Add(buf.ToString()); } } return(valueList.ToArray()); }
/// <summary> /// Créé une nouvelle instance de ElasticStore. /// </summary> /// <param name="dataSourceName">Nom de la datasource.</param> public ElasticStore(string dataSourceName) { try { _definition = DocumentDescriptor.GetDefinition(typeof(TDocument)); _documentTypeName = _definition.DocumentTypeName; _dataSourceName = dataSourceName ?? throw new ArgumentNullException("dataSourceName"); _indexName = ElasticManager.Instance.LoadSearchSettings(_dataSourceName).IndexName; _standardHandler = new StandardFacetHandler <TDocument>(_definition); _portfolioHandler = new PortfolioFacetHandler <TDocument>(_definition); } catch (Exception e) { if (_log.IsErrorEnabled) { _log.Error("Echec d'instanciation du store.", e); } throw new NotSupportedException("Search Broker<" + typeof(TDocument).FullName + "> " + e.Message, e); } }
public void TestRangeFacetHandler() { var query = new MatchAllDocsQuery(); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var testRangeFacetHandlers = new List <IFacetHandler>(); //testRangeFacetHandlers.Add(new RangeFacetHandler("year", true));//auto range // NightOwl888 - Auto range is no longer a feature. testRangeFacetHandlers.Add(new RangeFacetHandler("year", new List <string>(new string[] { "[* TO 2000]", "[2000 TO 2005]", "[2006 TO 2010]", "[2011 TO *]" }))); //testRangeFacetHandlers.Add(new RangeFacetHandler("price", "price", new NumberFieldFactory(), true)); // NightOwl888 - Auto range is no longer a feature. for (var i = 0; i < testRangeFacetHandlers.Count; i++) { var request = new BrowseRequest() { Count = 100, Offset = 0, Query = query, Sort = new Lucene.Net.Search.Sort(new SortField("price", SortField.DOUBLE, false)).GetSort() }; var sectionFilter = new BrowseSelection("category"); sectionFilter.NotValues = new string[] { "5" }; sectionFilter.SelectionOperation = BrowseSelection.ValueOperation.ValueOperationAnd; request.AddSelection(sectionFilter); var faceHandler = testRangeFacetHandlers[i]; var faceHandlers = new IFacetHandler[] { faceHandler, new SimpleFacetHandler("category") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), faceHandlers)); var factSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; request.SetFacetSpec(faceHandler.Name, factSpec); var result = browser.Browse(request); Console.WriteLine(string.Format("total hits:{0}", result.NumHits)); foreach (var facet in result.FacetMap[faceHandler.Name].GetFacets()) { Console.WriteLine(facet.ToString()); } Console.WriteLine(""); } }
private void LoadFacetHandler(string name, IList <string> loaded, IList <string> visited, WorkArea workArea) { IFacetHandler facetHandler = m_facetHandlerMap.Get(name); if (facetHandler != null && !loaded.Contains(name)) { visited.Add(name); var dependsOn = facetHandler.DependsOn; if (dependsOn.Count > 0) { foreach (var f in dependsOn) { if (name.Equals(f)) { continue; } if (!loaded.Contains(f)) { if (visited.Contains(f)) { throw new IOException("Facet handler dependency cycle detected, facet handler: " + name + " not loaded"); } LoadFacetHandler(f, loaded, visited, workArea); } if (!loaded.Contains(f)) { throw new IOException("unable to load facet handler: " + f); } facetHandler.PutDependedFacetHandler(m_facetHandlerMap[f]); } } long start = System.Environment.TickCount; facetHandler.LoadFacetData(this, workArea); long end = System.Environment.TickCount; if (logger.IsDebugEnabled()) { StringBuilder buf = new StringBuilder(); buf.Append("facetHandler loaded: ").Append(name).Append(", took: ").Append(end - start).Append(" ms"); logger.Debug(buf.ToString()); } loaded.Add(name); } }
// NOTE: The Weight.Scorer method lost the scoreDocsInOrder and topScorer parameters between // Lucene 4.3.0 and 4.8.0. They are not used by BoboBrowse anyway, so the code here diverges // from the original Java source to remove these two parameters. // public override Scorer Scorer(AtomicReaderContext context, bool scoreDocsInOrder, bool topScorer, Bits acceptDocs) public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) { AtomicReader reader = context.AtomicReader; if (reader is BoboSegmentReader) { BoboSegmentReader boboReader = (BoboSegmentReader)reader; IFacetHandler fhandler = boboReader.GetFacetHandler(m_parent.m_name); if (fhandler != null) { DocIdSetIterator dociter = null; RandomAccessFilter filter = fhandler.BuildFilter(m_parent.m_sel); if (filter != null) { RandomAccessDocIdSet docset = filter.GetRandomAccessDocIdSet(boboReader); if (docset != null) { dociter = BuildIterator(docset, boboReader, acceptDocs); } } if (dociter == null) { dociter = new MatchAllDocIdSetIterator(reader, acceptDocs); } BoboDocScorer scorer = null; if (fhandler is IFacetScoreable) { scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, m_parent.m_scoringFactory, m_parent.m_boostMap); } return(new FacetTermScorer(m_parent, m_similarity, dociter, scorer)); } else { logger.Error("FacetHandler is not defined for the field: " + m_parent.m_name); } return(null); } else { throw new IOException("index reader not instance of " + typeof(BoboSegmentReader)); } }
public override Scorer Scorer(IndexReader reader, bool scoreDocsInOrder, bool topScorer) { if (reader is BoboIndexReader) { BoboIndexReader boboReader = (BoboIndexReader)reader; TermDocs termDocs = boboReader.TermDocs(null); IFacetHandler fhandler = boboReader.GetFacetHandler(parent._name); if (fhandler != null) { DocIdSetIterator dociter = null; RandomAccessFilter filter = fhandler.BuildFilter(parent._sel); if (filter != null) { RandomAccessDocIdSet docset = filter.GetRandomAccessDocIdSet(boboReader); if (docset != null) { dociter = BuildIterator(docset, termDocs); } } if (dociter == null) { dociter = new MatchAllDocIdSetIterator(reader); } BoboDocScorer scorer = null; if (fhandler is IFacetScoreable) { scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, parent._scoringFactory, parent._boostMap); } return(new FacetTermScorer(parent, _similarity, dociter, scorer)); } else { logger.Error("FacetHandler is not defined for the field: " + parent._name); } return(null); } else { throw new IOException("index reader not instance of " + typeof(BoboIndexReader)); } }
internal FacetOrRandomAccessDocIdSet(IFacetHandler facetHandler, BoboIndexReader reader, string[] vals, IFacetValueConverter valConverter, bool takeCompliment) { _dataCache = facetHandler.GetFacetData <FacetDataCache>(reader); _orderArray = _dataCache.OrderArray; _index = valConverter.Convert(_dataCache, vals); _bitset = new OpenBitSet(_dataCache.ValArray.Count); foreach (int i in _index) { _bitset.FastSet(i); } if (takeCompliment) { // flip the bits for (int i = 0; i < _dataCache.ValArray.Count; ++i) { _bitset.FastFlip(i); } } }
public void TestSimpleBrowser() { var query = new TermQuery(new Term("name", "asp.net")); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var request = new BrowseRequest() { Count = 10, Offset = 0, Query = query, Sort = new Lucene.Net.Search.Sort(new SortField("price", SortField.DOUBLE, false)).GetSort() }; var facetHandlers = new IFacetHandler[] { new SimpleFacetHandler("category") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), facetHandlers)); var facetSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc, MinHitCount = 1 }; request.SetFacetSpec("category", facetSpec); var result = browser.Browse(request); Console.WriteLine(string.Format("total hits:{0}", result.NumHits)); Console.WriteLine("==========================="); foreach (var facet in result.FacetMap["category"].GetFacets()) { var category = _categories.First(k => k.Value == int.Parse(facet.Value.ToString())); Console.WriteLine("{0}:({1})", category.Key, facet.FacetValueHitCount); } Console.WriteLine("==========================="); for (var i = 0; i < result.Hits.Length; i++) { var doc = browser.Doc(result.Hits[i].DocId); var category = _categories.First(k => k.Value == int.Parse(doc.GetField("category").StringValue)).Key; Console.WriteLine(string.Format("{2} - {0} ${1} by {3}", doc.GetField("name").StringValue, doc.GetField("price").StringValue, category, doc.GetField("author").StringValue)); } }
public virtual Explanation Explain(AtomicReader indexReader, int docid, Explanation innerExplaination) { if (!(indexReader is BoboSegmentReader)) { throw new ArgumentException("IndexReader is not BoboSegmentReader"); } BoboSegmentReader reader = (BoboSegmentReader)indexReader; Explanation exp = new Explanation(); exp.Description = "FacetBasedBoost"; float boost = 1.0f; foreach (var boostEntry in m_boostMaps) { string facetName = boostEntry.Key; IFacetHandler handler = reader.GetFacetHandler(facetName); if (!(handler is IFacetScoreable)) { throw new ArgumentException(facetName + " does not implement IFacetScoreable"); } IFacetScoreable facetScoreable = (IFacetScoreable)handler; BoboDocScorer scorer = facetScoreable.GetDocScorer(reader, m_scoringFunctionFactory, boostEntry.Value); float facetBoost = scorer.Score(docid); Explanation facetExp = new Explanation(); facetExp.Description = facetName; facetExp.Value = facetBoost; facetExp.AddDetail(scorer.Explain(docid)); boost *= facetBoost; exp.AddDetail(facetExp); } exp.Value = boost; exp.AddDetail(innerExplaination); return(exp); }
/// <summary> /// Sets runtime facet handler. If has the same name as a preload handler, for the /// duration of this browser, this one will be used. /// </summary> /// <param name="facetHandler">Runtime facet handler</param> public virtual void SetFacetHandler(IFacetHandler facetHandler) { IEnumerable<string> dependsOn = facetHandler.DependsOn; BoboIndexReader reader = (BoboIndexReader)IndexReader; if (dependsOn.Count() > 0) { foreach (var fn in dependsOn) { var f = _runtimeFacetHandlerMap.Get(fn); if (f == null) { f = reader.GetFacetHandler(fn); } if (f == null) { throw new System.IO.IOException("depended on facet handler: " + fn + ", but is not found"); } facetHandler.PutDependedFacetHandler(f); } } facetHandler.LoadFacetData(reader); _runtimeFacetHandlerMap.Put(facetHandler.Name, facetHandler); }
/// <summary> /// Sets runtime facet handler. If has the same name as a preload handler, for the /// duration of this browser, this one will be used. /// </summary> /// <param name="facetHandler">Runtime facet handler</param> public virtual void SetFacetHandler(IFacetHandler facetHandler) { IEnumerable <string> dependsOn = facetHandler.DependsOn; BoboIndexReader reader = (BoboIndexReader)IndexReader; if (dependsOn.Count() > 0) { foreach (var fn in dependsOn) { var f = _runtimeFacetHandlerMap.Get(fn); if (f == null) { f = reader.GetFacetHandler(fn); } if (f == null) { throw new System.IO.IOException("depended on facet handler: " + fn + ", but is not found"); } facetHandler.PutDependedFacetHandler(f); } } facetHandler.LoadFacetData(reader); _runtimeFacetHandlerMap.Put(facetHandler.Name, facetHandler); }
public FacetRangeFilter(IFacetHandler facetHandler, string rangeString) { _facetHandler = facetHandler; _rangeString = rangeString; }
public MultiValueORFacetFilter(IFacetHandler facetHandler, string[] vals, bool takeCompliment) : this(facetHandler, vals, FacetValueConverter_Fields.DEFAULT, takeCompliment) { }
public void TestRangeFacetHandler() { var query = new MatchAllDocsQuery(); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var testRangeFacetHandlers = new List<IFacetHandler>(); //testRangeFacetHandlers.Add(new RangeFacetHandler("year", true));//auto range // NightOwl888 - Auto range is no longer a feature. testRangeFacetHandlers.Add(new RangeFacetHandler("year", new List<string>(new string[] { "[* TO 2000]", "[2000 TO 2005]", "[2006 TO 2010]", "[2011 TO *]" }))); //testRangeFacetHandlers.Add(new RangeFacetHandler("price", "price", new NumberFieldFactory(), true)); // NightOwl888 - Auto range is no longer a feature. for (var i = 0; i < testRangeFacetHandlers.Count; i++) { var request = new BrowseRequest() { Count = 100, Offset = 0, Query = query, Sort = new Lucene.Net.Search.Sort(new SortField("price", SortField.DOUBLE, false)).GetSort() }; var sectionFilter = new BrowseSelection("category"); sectionFilter.NotValues = new string[] { "5" }; sectionFilter.SelectionOperation = BrowseSelection.ValueOperation.ValueOperationAnd; request.AddSelection(sectionFilter); var faceHandler = testRangeFacetHandlers[i]; var faceHandlers = new IFacetHandler[] { faceHandler, new SimpleFacetHandler("category") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), faceHandlers)); var factSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; request.SetFacetSpec(faceHandler.Name, factSpec); var result = browser.Browse(request); Console.WriteLine(string.Format("total hits:{0}", result.NumHits)); foreach (var facet in result.FacetMap[faceHandler.Name].GetFacets()) { Console.WriteLine(facet.ToString()); } Console.WriteLine(""); } }
public void TestAutoComplete() { var query = new MatchAllDocsQuery(); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var request = new BrowseRequest() { Count = 10, Offset = 0, Query = query }; //var prefix = "java"; // NightOwl888: Prefix is no longer a feature //Console.WriteLine(string.Format("prefix:{0}", prefix)); //Console.WriteLine("============================="); var faceHandlers = new IFacetHandler[] { new SimpleFacetHandler("name") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), faceHandlers)); var factSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc }; request.SetFacetSpec("name", factSpec); var result = browser.Browse(request); foreach (var facet in result.FacetMap["name"].GetFacets()) { Console.WriteLine(facet.ToString()); } }
protected static BrowseHit[] BuildHits(MyScoreDoc[] scoreDocs, SortField[] sortFields, IDictionary <string, IFacetHandler> facetHandlerMap, bool fetchStoredFields, IEnumerable <string> termVectorsToFetch, IFacetHandler groupBy, CombinedFacetAccessible[] groupAccessibles) { BrowseHit[] hits = new BrowseHit[scoreDocs.Length]; IEnumerable <IFacetHandler> facetHandlers = facetHandlerMap.Values; for (int i = scoreDocs.Length - 1; i >= 0; i--) { MyScoreDoc fdoc = scoreDocs[i]; BoboIndexReader reader = fdoc.reader; BrowseHit hit = new BrowseHit(); if (fetchStoredFields) { hit.StoredFields = reader.Document(fdoc.Doc); } if (termVectorsToFetch != null && termVectorsToFetch.Count() > 0) { var tvMap = new Dictionary <string, BrowseHit.TermFrequencyVector>(); hit.TermFreqMap = tvMap; foreach (string field in termVectorsToFetch) { ITermFreqVector tv = reader.GetTermFreqVector(fdoc.Doc, field); if (tv != null) { int[] freqs = tv.GetTermFrequencies(); string[] terms = tv.GetTerms(); tvMap[field] = new BrowseHit.TermFrequencyVector(terms, freqs); } } } var map = new Dictionary <string, string[]>(); var rawMap = new Dictionary <string, object[]>(); foreach (var facetHandler in facetHandlers) { map[facetHandler.Name] = facetHandler.GetFieldValues(reader, fdoc.Doc); rawMap[facetHandler.Name] = facetHandler.GetRawFieldValues(reader, fdoc.Doc); } hit.FieldValues = map; hit.RawFieldValues = rawMap; hit.DocId = fdoc.Doc + fdoc.queue.@base; hit.Score = fdoc.Score; hit.Comparable = fdoc.Value; if (groupBy != null) { hit.GroupField = groupBy.Name; hit.GroupValue = hit.GetField(groupBy.Name); hit.RawGroupValue = hit.GetRawField(groupBy.Name); if (groupAccessibles != null && hit.GroupValue != null && groupAccessibles != null && groupAccessibles.Length > 0) { BrowseFacet facet = groupAccessibles[0].GetFacet(hit.GroupValue); hit.GroupHitsCount = facet.FacetValueHitCount; } } hits[i] = hit; } return(hits); }
public bool PostProcess(IBase baseObject, IGeneratorConfiguration generatorConfiguration, IFacetHandler currentHandler) { return(true); }
internal FacetOrRandomAccessDocIdSet(IFacetHandler facetHandler, BoboIndexReader reader, string[] vals, IFacetValueConverter valConverter, bool takeCompliment) { _dataCache = facetHandler.GetFacetData<FacetDataCache>(reader); _orderArray = _dataCache.OrderArray; _index = valConverter.Convert(_dataCache, vals); _bitset = new OpenBitSet(_dataCache.ValArray.Count); foreach (int i in _index) { _bitset.FastSet(i); } if (takeCompliment) { // flip the bits for (int i = 0; i < _dataCache.ValArray.Count; ++i) { _bitset.FastFlip(i); } } }
public MultiValueORFacetFilter(IFacetHandler facetHandler, string[] vals, bool takeCompliment) : this(facetHandler, vals, FacetValueConverter_Fields.DEFAULT, takeCompliment) {}
public FacetOrFilter(IFacetHandler facetHandler, string[] vals, bool takeCompliment) : this(facetHandler, vals, takeCompliment, FacetValueConverter_Fields.DEFAULT) { }
public void TestSimpleBrowser() { var query = new TermQuery(new Term("name", "asp.net")); Console.WriteLine(string.Format("query: <{0}>", query.ToString())); var request = new BrowseRequest() { Count = 10, Offset = 0, Query = query, Sort = new Lucene.Net.Search.Sort(new SortField("price", SortField.DOUBLE, false)).GetSort() }; var facetHandlers = new IFacetHandler[] { new SimpleFacetHandler("category") }; var browser = new BoboBrowser(BoboIndexReader.GetInstance(IndexReader.Open(_indexDir, true), facetHandlers)); var facetSpec = new FacetSpec() { OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc, MinHitCount = 1 }; request.SetFacetSpec("category", facetSpec); var result = browser.Browse(request); Console.WriteLine(string.Format("total hits:{0}", result.NumHits)); Console.WriteLine("==========================="); foreach (var facet in result.FacetMap["category"].GetFacets()) { var category = _categories.First(k => k.Value == int.Parse(facet.Value.ToString())); Console.WriteLine("{0}:({1})", category.Key, facet.FacetValueHitCount); } Console.WriteLine("==========================="); for (var i = 0; i < result.Hits.Length; i++) { var doc = browser.Doc(result.Hits[i].DocId); var category = _categories.First(k => k.Value == int.Parse(doc.GetField("category").StringValue)).Key; Console.WriteLine(string.Format("{2} - {0} ${1} by {3}", doc.GetField("name").StringValue, doc.GetField("price").StringValue, category, doc.GetField("author").StringValue)); } }
public FacetFilter(IFacetHandler facetHandler, string value) { _facetHandler = facetHandler; _value = value; }