Comments (1)
Maybe I am missing something, but why aren't you using the built-in string comparer (TermOrdValComparer) with reverse support?
lucenenet/src/Lucene.Net.Tests/Search/TestSort.cs
Lines 350 to 384 in bed207a
lucenenet/src/Lucene.Net.Tests/Search/TestSort.cs
Lines 279 to 312 in bed207a
If the custom FieldComparer
is required, your main issue is that you are allocating memory inside of the comparison methods. Comparers should only allocate memory in the class constructor and/or field initializers, never in the comparison methods, because this will cause a lot of garbage collection overhead.
public override void Copy(int slot, int doc)
{
termCopy = new BytesRef(); // Expensive allocation. This method will be called a lot.
sortedResults.Get(doc, termCopy);
bvalues[slot] = termCopy;
}
public override int CompareBottom(int doc)
{
BytesRef termOrd = new BytesRef(); // Expensive allocation. This method will be called a lot.
int ord = sortedResults.GetOrd(doc);
sortedResults.LookupOrd(ord, termOrd); // Expensive lookup. The TermOrdValComparer only does lookups in the Copy() method and only when necessary.
var result = DoCompare(bvalues[bottomSlot], termOrd);
return result;
}
Also, the TermOrdValComparer uses ords to do the comparison in most cases, falling back to term comparison only when necessary. See the TermOrdValComparer
docs and FieldComparer<T>
docs.
from lucenenet.
Related Issues (20)
- Investigate Failing Test: Lucene.Net.Analysis.Miscellaneous.TestStemmerOverrideFilter::TestRandomRealisticWhiteSpace() HOT 1
- Task: Finish [SuppressTempFileChecks] attribute functionality
- Failure when parsing phrases HOT 3
- Alternative for SetNextReader to return all strings HOT 1
- Docs: DocFx Build Failure for API Docs HOT 4
- Replace Lucene.Net.Support.Arrays.Empty<T> with System.Array.Empty<T>
- Audit use of AtomicInt32 and AtomicInt64 methods
- Improve ICollector usage
- Simplify IndexReader constructor
- Meta: Add Support unit tests HOT 1
- Review formatting of boolean strings (in ToString() methods and similar)
- Add cancellation support to IndexSearcher
- Fix test name reporting when test is in a base class
- Create Roslyn code analyzer to streamline review of proper usage of format/parse methods for numeric types
- Target .NET 8 HOT 16
- .Net 6 and 8 slower than .Net 472 HOT 7
- Remove unnecessary`[MethodImpl(MethodImplOptions.NoInlining)]`
- Fix calls to Exception.StackTrace
- Performance decrease 30x when running on .NET 8 HOT 37
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 lucenenet.