<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: wolfgarbe</title><link>https://news.ycombinator.com/user?id=wolfgarbe</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 09 May 2026 03:11:24 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=wolfgarbe" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by wolfgarbe in "Show HN: A spell-checker 380x faster than Hunspell, 5x faster than SymSpell"]]></title><description><![CDATA[
<p>Peter Norvig shows that an edit distance = 2 will cover 98.9% spelling errors.
<a href="https://impythonist.wordpress.com/2014/03/18/peter-norvigs-21-line-spelling-corrector-using-probability-theory/" rel="nofollow">https://impythonist.wordpress.com/2014/03/18/peter-norvigs-2...</a><p>That's the reason why the default maximum edit distance of SymSpell is 2.<p>Now, all your 6 out of 6  examples are chosen from that 1.1% margin that is not covered by edit distance 2, presenting a rather unlikely high amount of errors within a single word.<p>The third-party SymSpell port from Justin Willaby, which you were using for benchmarking, clearly states that you need to set both maxEditDistance and dictionaryEditDistance to a higher number if you want to correct higher edit distances. That you neither used nor mentioned. This has nothing to do with accuracy;  it is a choice regarding a performance vs. maximum edit distance tradeoff one can make according to the use case at hand.<p><a href="https://github.com/justinwilaby/spellchecker-wasm?tab=readme-ov-file#allowing-for-deeper-word-searches" rel="nofollow">https://github.com/justinwilaby/spellchecker-wasm?tab=readme...</a><p>pronnouncaition IS within edit distance 3, according to the Damerau-Levenshtein edit distance used by SymSpell. The reason is that adjacent transpositions are counted as a single dit.
<a href="https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance" rel="nofollow">https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_di...</a></p>
]]></description><pubDate>Fri, 06 Feb 2026 17:07:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46915362</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=46915362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46915362</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: A spell-checker 380x faster than Hunspell, 5x faster than SymSpell"]]></title><description><![CDATA[
<p>Author of SymSpell here. Congrats on the launch of Lexiathan.<p>Unfortunately, the comparison of Lexiathan vs. Symspell on your website regarding accuracy is misleading.<p>1. SymSpell has two parameters to control the maximum edit distance. Once you set both to 3, then also terms with an edit distance of 3 are accurately corrected:<p><pre><code>  pronnouncaition -> pronunciation

  inndappendent -> independent

  unegspeccted -> unexpected

  soggtwaee       -> software
</code></pre>
2. SymSpell comes with dictionaries in several sizes. Once you load the 500_000 terms dictionary, then also the two remaining terms will be corrected:<p><pre><code>  maggnificntally -> magnificently

  annnesteasialgist -> anesthesiologist
</code></pre>
<a href="https://github.com/wolfgarbe/SymSpell/blob/master/SymSpell.Benchmark/test_data/frequency_dictionary_en_500_000.txt" rel="nofollow">https://github.com/wolfgarbe/SymSpell/blob/master/SymSpell.B...</a><p>SymSpell accurately corrects all of your examples if used properly with the correct parameters and dictionary.<p>Apart from that, your methodology of comparing correction accuracy by cherry-picking specific terms without statistical significance, where your product seemingly performs better, is questionable.<p>One would use large public corpora to measure the percentage of accurately corrected terms as well as the percentage of false positives.<p>Because SymSpell is Open-Source, everyone can integrate it into their applications for free, modify the code, use different dictionaries in various languages, or add terms to existing ones.<p><a href="https://github.com/wolfgarbe/SymSpell" rel="nofollow">https://github.com/wolfgarbe/SymSpell</a><p><a href="https://github.com/wolfgarbe/symspell_rs" rel="nofollow">https://github.com/wolfgarbe/symspell_rs</a></p>
]]></description><pubDate>Fri, 06 Feb 2026 08:55:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=46910564</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=46910564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46910564</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Building a Simple Search Engine That Works"]]></title><description><![CDATA[
<p>The stopword list in SeekStorm is purely optional, per default it is empty.<p>The query "to be or not to be" that you mentioned, consisting solely of stopwords, returns complete results and perform quite well in the benchmark:
<a href="https://github.com/SeekStorm/SeekStorm?tab=readme-ov-file#benchmarks" rel="nofollow">https://github.com/SeekStorm/SeekStorm?tab=readme-ov-file#be...</a><p>Both Lucene and Elastic still offer stopword filters:
<a href="https://lucene.apache.org/core/10_3_2/analysis/common/org/apache/lucene/analysis/core/StopFilter.html" rel="nofollow">https://lucene.apache.org/core/10_3_2/analysis/common/org/ap...</a>
<a href="https://www.elastic.co/docs/reference/text-analysis/analysis-stop-tokenfilter" rel="nofollow">https://www.elastic.co/docs/reference/text-analysis/analysis...</a></p>
]]></description><pubDate>Mon, 17 Nov 2025 15:31:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45954443</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=45954443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45954443</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: I wrote a full text search engine in Go"]]></title><description><![CDATA[
<p>Can the index size exceed the RAM size (e.g., via memory mapping), or are index size and document number limited by RAM size?
It would be good to mention those limitations in the README.</p>
]]></description><pubDate>Fri, 10 Oct 2025 12:16:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45538093</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=45538093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45538093</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: I wrote a full text search engine in Go"]]></title><description><![CDATA[
<p>Sure, but it says "High-performance" Full Text Search Engine. Shouldn't that claim be backed up by numbers, comparing it to the state of the art?</p>
]]></description><pubDate>Fri, 10 Oct 2025 12:09:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45538025</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=45538025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45538025</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: I wrote a full text search engine in Go"]]></title><description><![CDATA[
<p>Great work! Would be interesting to see how it compares to Lucene performance-wise, e.g. with a benchmark like <a href="https://github.com/quickwit-oss/search-benchmark-game" rel="nofollow">https://github.com/quickwit-oss/search-benchmark-game</a></p>
]]></description><pubDate>Thu, 09 Oct 2025 18:39:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45531433</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=45531433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45531433</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Ask HN: Struggling to Understand DHTs – Any Good Resources?"]]></title><description><![CDATA[
<p>The most widely used DHT is Kademlia from Petar Maymounkov and David Mazières.
It is used in Ethereum, IPFS, I2P, Gnutella DHT, and many other applications.<p><a href="https://en.wikipedia.org/wiki/Kademlia" rel="nofollow">https://en.wikipedia.org/wiki/Kademlia</a><p><a href="https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf" rel="nofollow">https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia...</a><p><a href="https://web.archive.org/web/20120128120732/http://www.cs.rice.edu/Conferences/IPTPS02/109.pdf" rel="nofollow">https://web.archive.org/web/20120128120732/http://www.cs.ric...</a></p>
]]></description><pubDate>Sun, 16 Feb 2025 11:14:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=43067200</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=43067200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43067200</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>SeekStorm does currently not use io_uring, but it is on our roadmap.
Challenges are the cross-platform compatibility. Linux (io_uring) and Windows (IoRing) use different implementations, and other OS don't support it. There is no abstraction layer over those implementations in Rust, so we are on our own.<p>It would increase concurrent read and write speed (index loading, searching) by removing the need to lock seek and read/write.<p>But I would expect that the mmap implementations do already use io_uring / IoRing.<p>Yes, lazy loading would be possible, but pure RAM access does not offer enough benefits to justify the effort to replicate much of the memory mapping.</p>
]]></description><pubDate>Sat, 14 Dec 2024 14:12:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=42417258</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42417258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42417258</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>SeekStorm comes with an http interface.<p>The SeekStorm server features an REST API via http: <a href="https://seekstorm.apidocumentation.com" rel="nofollow">https://seekstorm.apidocumentation.com</a><p>It also comes with an embedded Web UI: <a href="https://github.com/SeekStorm/SeekStorm?tab=readme-ov-file#build-a-pdf-search-engine-with-the-seekstorm-server">https://github.com/SeekStorm/SeekStorm?tab=readme-ov-file#bu...</a><p>Or did you mean a Web based interface to create and manage indices, define index schemas, add documents etc?</p>
]]></description><pubDate>Mon, 09 Dec 2024 18:56:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42369243</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42369243</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42369243</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>>> <i>The documentation seems a bit sparse.</i><p>We just released a new OpenAPI based documentation for the SeekStorm server REST API: <a href="https://seekstorm.apidocumentation.com" rel="nofollow">https://seekstorm.apidocumentation.com</a><p>For the library we have the standard rust doc: <a href="https://docs.rs/seekstorm/latest/seekstorm/" rel="nofollow">https://docs.rs/seekstorm/latest/seekstorm/</a></p>
]]></description><pubDate>Mon, 09 Dec 2024 18:47:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=42369154</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42369154</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42369154</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>For the latency benchmarks we used vanilla BM25 (SimilarityType::Bm25f for a single field) for comparability, so there are no differences in terms of accuracy.<p>For SimilarityType::Bm25fProximity which takes into account the proximity between query term matches within the document, we have so far only anecdotal evidence that it returns significantly more relevant results for many queries.<p>Systematic relevancy benchmarks like BeIR, MS MARCO are planned.</p>
]]></description><pubDate>Tue, 03 Dec 2024 18:32:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=42309510</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42309510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42309510</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>The Seekstorm library is 9 MB, and the Seekstorm server executable is 8 MB, depending on the features selected in cargo.<p>You add the library via 'cargo add seekstorm' to your project which you anyway have to compile.<p>As for the server, we may add binaries for the main OS in the future.<p>WASM and Python bindings are on our roadmap.</p>
]]></description><pubDate>Tue, 03 Dec 2024 12:03:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42305269</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42305269</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42305269</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>In SeekStorm you can choose per index whether to use Mmap or let SeekStorm fully control Ram access. There is a slight performance advantage to the latter, at the cost of higher index load time of the former.
<a href="https://docs.rs/seekstorm/latest/seekstorm/index/enum.AccessType.html#variant.Ram" rel="nofollow">https://docs.rs/seekstorm/latest/seekstorm/index/enum.Access...</a></p>
]]></description><pubDate>Tue, 03 Dec 2024 07:22:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=42303739</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42303739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42303739</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>The benchmark should be fairly fair, as it was developed by Tantivy themselves (and Jason Wolfe). So, the choice of corpus and queries was theirs. But, of course, your mileage may vary. It is always best to benchmark it on your machine with your data and your queries.<p>Yes, WASM and Python bindings are on our roadmap.</p>
]]></description><pubDate>Tue, 03 Dec 2024 07:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=42303704</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42303704</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42303704</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>Currently, you can choose between tokenizers with or without folding. But configurability per language or full customizability of the folding logic by the user is a good idea.</p>
]]></description><pubDate>Tue, 03 Dec 2024 06:59:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=42303632</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42303632</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42303632</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>The code for the distributed search cluster is not yet stable enough to be published, but it will be released as open-source as well.<p>As for shared storage, do you mean something like NAS or, rather Amazon S3?
Cloud-native support of object storage and separating storage and compute is on our roadmap. Challenges will be maintaining latency and the need for more sophisticated caching.</p>
]]></description><pubDate>Tue, 03 Dec 2024 06:54:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=42303602</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42303602</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42303602</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>Its not just about speed. Speed reflects efficiency. Efficiency is needed to serve more queries in parallel, to search within exponentially growing data, with less expensive hardware, and fewer servers, consuming less energy. Therefore the pursuit for efficiency never gets outdated and has no limit.</p>
]]></description><pubDate>Mon, 02 Dec 2024 23:44:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=42301622</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42301622</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42301622</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>PostgreSQL is an SQL database that also offers full-text search (FTS), with extensions like pg_search it also supports BM25 scoring which is essential for lexical search. SeekStorm is centered around full-text search only, it doesn't offer SQL.<p>Performance-wise it would be indeed interesting to run a benchmark. The third-party open-source benchmark we are currently using (search_benchmark_game) does not yet support PostgreSQL. So yes, that comparison is still pending.</p>
]]></description><pubDate>Mon, 02 Dec 2024 22:10:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=42300947</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42300947</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42300947</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>Yes. We waited long for AOT compilation to become mature, to remove the need for the user to install the .Net framework. But two years ago when we decided to switch, we still couldn't just get the AOT compilation of our codebase to work without changes (perhaps it was somehow possible, but the available documentation was not very verbose about this). Also, there is still a performance gap. Of course, this doesn't matter for most of the applications, where the completeness and consistency of the framework, and the number of programmers fluent in that language might matter more. But for a search server, we needed to carve out every inch of performance we could get. And other benchmarks seemed to echo our experience: <a href="https://programming-language-benchmarks.vercel.app/rust-vs-csharp" rel="nofollow">https://programming-language-benchmarks.vercel.app/rust-vs-c...</a></p>
]]></description><pubDate>Mon, 02 Dec 2024 21:12:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=42300458</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42300458</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42300458</guid></item><item><title><![CDATA[New comment by wolfgarbe in "Show HN: SeekStorm – open-source sub-millisecond search in Rust"]]></title><description><![CDATA[
<p>The 2-4 speed ratio was not meant to denounce C#, which is a great language I loved to program in for over two decades, coming from Delphi.
Unfortunately, C# has not a complete SIMD support.
See our request to support the SSE4.2 _mm_cmpistrm instruction <a href="https://github.com/dotnet/runtime/discussions/63332">https://github.com/dotnet/runtime/discussions/63332</a>, which we required for a vectorized intersection between two sorted 16-bit arrays.
We did the switch from C# to Rust not light-minded, as the cost of porting a fairly large codebase is time-consuming.
We just wanted to share our experience for our specific task, not as a general statement.</p>
]]></description><pubDate>Mon, 02 Dec 2024 20:26:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=42300056</link><dc:creator>wolfgarbe</dc:creator><comments>https://news.ycombinator.com/item?id=42300056</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42300056</guid></item></channel></rss>