Comments (3)
As mentioned in the wiki, all of the interfaces were renamed to start with "I"
to follow the .NET conventions. So the equivalent of ComparatorFactory
in Java is IComparatorFactory
in .NET.
There is a unit test that demonstrates how to build a custom sort. Here is the relevant source.
[Test]
public void TestCustomFacetSort()
{
BrowseRequest req = new BrowseRequest();
FacetSpec numberSpec = new FacetSpec();
numberSpec.CustomComparatorFactory = new TestCustomFacetSortComparatorFactory();
numberSpec.OrderBy = FacetSpec.FacetSortSpec.OrderByCustom;
numberSpec.MaxCount = 3;
req.SetFacetSpec("number", numberSpec);
var answer = new Dictionary<string, IEnumerable<BrowseFacet>>()
{
{ "number", new BrowseFacet[] { new BrowseFacet("2130", 1), new BrowseFacet("1013", 1), new BrowseFacet("0913", 1) } }
};
DoTest(req, 7, answer, null);
numberSpec.OrderBy = FacetSpec.FacetSortSpec.OrderValueAsc;
answer = new Dictionary<string, IEnumerable<BrowseFacet>>()
{
{ "number", new BrowseFacet[] { new BrowseFacet("0005", 1), new BrowseFacet("0010", 1), new BrowseFacet("0011", 1) } }
};
DoTest(req, 7, answer, null);
}
private class TestCustomFacetSortComparatorFactory : IComparatorFactory
{
public IComparer<int> NewComparator(IFieldValueAccessor fieldValueAccessor, BigSegmentedArray counts)
{
return new TestCustomFacetSortIntComparator(fieldValueAccessor, counts);
}
public IComparer<BrowseFacet> NewComparator()
{
return new TestCustomFacetSortBrowseFacetComparator();
}
public class TestCustomFacetSortIntComparator : IComparer<int>
{
private readonly IFieldValueAccessor fieldValueAccessor;
private readonly BigSegmentedArray counts;
public TestCustomFacetSortIntComparator(IFieldValueAccessor fieldValueAccessor, BigSegmentedArray counts)
{
this.fieldValueAccessor = fieldValueAccessor;
this.counts = counts;
}
public int Compare(int v1, int v2)
{
var size1 = (int)this.fieldValueAccessor.GetRawValue(v1);
var size2 = (int)this.fieldValueAccessor.GetRawValue(v2);
int val = size1 - size2;
if (val == 0)
{
val = counts.Get(v1) - counts.Get(v2);
}
return val;
}
}
public class TestCustomFacetSortBrowseFacetComparator : IComparer<BrowseFacet>
{
public int Compare(BrowseFacet o1, BrowseFacet o2)
{
int v1 = Convert.ToInt32(o1.Value);
int v2 = Convert.ToInt32(o2.Value);
int val = v2 - v1;
if (val == 0)
{
val = o2.FacetValueHitCount - o1.FacetValueHitCount;
}
return val;
}
}
}
And the IComparatorFactory is now as follows (with documentation):
/// <summary>
/// Comparator for custom sorting a facet value.
/// author jwang
/// </summary>
public interface IComparatorFactory
{
///<summary>Providers a Comparator from field values and counts. This is called within a browse. </summary>
///<param name="fieldValueAccessor"> accessor for field values </param>
///<param name="counts"> hit counts </param>
///<returns> Comparator instance </returns>
IComparer<int> NewComparator(IFieldValueAccessor fieldValueAccessor, BigSegmentedArray counts);
///<summary>Providers a Comparator. This is called when doing a merge across browses. </summary>
///<returns> Comparator instance </returns>
IComparer<BrowseFacet> NewComparator();
}
from bobobrowse.net.
Note that the return type of the IComparatorFactory
is the .NET IComparer<T>
type, and works the same way as specified on MSDN.
from bobobrowse.net.
Okey, it works!
from bobobrowse.net.
Related Issues (20)
- MultiBoboBrowser HOT 1
- BrowseRequest.FetchStoredFields HOT 1
- BoboIndexReader.IsCurrent() HOT 1
- No need for cache warm-up for the system to perform HOT 1
- replace Common.Logging with LibLog HOT 1
- System.ArgumentOutOfRangeException HOT 1
- Empty BrowseHit array HOT 1
- NullReferenceException when parallel searching HOT 1
- .Net Core HOT 3
- Does bobobrowse cache the search result in anyway?
- Create a version without dependency on DLR to support Xamarin clients HOT 1
- How to get count of intersecting facet values?
- Nested Facet
- BoboIndexReader and IndexReader: can Bobo be used for simple text search, just like IndexReader?
- return a number of results for each facet
- Facet selection and ValueOperationAnd HOT 1
- Building the SearchIndex
- Where should I do the PR for upgrading mvc demo HOT 2
- Project status HOT 2
- BoboBrowse Custom Sort Field
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bobobrowse.net.