You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucenenet.apache.org by "paulirwin (via GitHub)" <gi...@apache.org> on 2026/04/15 22:46:03 UTC
[PR] Issue/1242 [lucenenet]
paulirwin opened a new pull request, #1259:
URL: https://github.com/apache/lucenenet/pull/1259
- [X] You've read the [Contributor Guide](https://github.com/apache/lucenenet/blob/master/CONTRIBUTING.md) and [Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
- [X] You've included unit or integration tests for your change, where applicable.
- [X] You've included inline docs for your change, where applicable.
- [X] There's an open issue for the PR that you are making. If you'd like to propose a change, please [open an issue](https://github.com/apache/lucenenet/issues/new/choose) to discuss the change or find an existing issue.
Backport fixes for AnalyzingInfixSuggester.
Fixes #1242
## Description
This backports the Lucene fixes for LUCENE-7564 and LUCENE-7670. It also fixes a missed line of code when LUCENE-5889 was originally backported.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Backport fixes for AnalyzingInfixSuggester [lucenenet]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259#discussion_r3093726822
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -835,11 +959,14 @@ protected virtual void Dispose(bool disposing) // LUCENENET specific - implement
m_searcherMgr.Dispose();
m_searcherMgr = null;
}
- if (writer != null)
+ if (m_writer != null)
+ {
+ m_writer.Dispose();
+ m_writer = null;
+ }
+ if (dir != null) // LUCENENET specific - Support for LUCENE-7564. Close dir even when writer is null.
{
- writer.Dispose();
dir.Dispose();
- writer = null;
}
}
Review Comment:
`Dispose(bool)` mutates and disposes `m_searcherMgr` without taking `searcherMgrLock`, while `DoLookup()`/`Count`/`GetSizeInBytes` rely on that lock to safely acquire from the current manager. This can race and lead to `NullReferenceException` or acquiring/releasing against a disposed manager. Consider taking `searcherMgrLock` (and setting `m_searcherMgr` to null) during disposal to keep the locking contract consistent.
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -594,8 +707,19 @@ public virtual IList<LookupResult> DoLookup(string key, IEnumerable<BytesRef> co
// We sorted postings by weight during indexing, so we
// only retrieve the first num hits now:
ICollector c2 = new EarlyTerminatingSortingCollector(c, SORT, num);
- IndexSearcher searcher = m_searcherMgr.Acquire();
IList<LookupResult> results = null;
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
Review Comment:
`DoLookup()` captures `m_searcherMgr` under `searcherMgrLock` but doesn't handle the case where it is `null` (e.g., another thread calls `Dispose()` or `Build()` fails and leaves `m_searcherMgr` unset). In that case `mgr.Acquire()` will throw a `NullReferenceException` instead of a controlled "suggester was not built"/disposed exception. Consider checking `mgr` for null inside the lock and throwing an `IllegalStateException` (or `ObjectDisposedException`) before calling `Acquire()`.
```suggestion
mgr = m_searcherMgr;
if (mgr is null)
{
throw new InvalidOperationException("The suggester has not been built or has already been disposed.");
}
```
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -851,7 +978,18 @@ public override long GetSizeInBytes()
{
if (m_searcherMgr != null)
{
- IndexSearcher searcher = m_searcherMgr.Acquire();
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
Review Comment:
`GetSizeInBytes()` assumes `m_searcherMgr` is non-null after entering `searcherMgrLock`, but `m_searcherMgr` can be set to null concurrently (e.g., `Dispose()`). If that happens, `mgr = m_searcherMgr; searcher = mgr.Acquire();` can throw `NullReferenceException`. Add a null check inside the lock and either return the already computed size or throw a consistent exception.
```suggestion
mgr = m_searcherMgr;
if (mgr is null)
{
return mem;
}
```
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -884,14 +1022,25 @@ public override long Count
{
return 0;
}
- IndexSearcher searcher = m_searcherMgr.Acquire();
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
+ searcher = mgr.Acquire();
+ }
Review Comment:
`Count` captures `m_searcherMgr` under `searcherMgrLock` but doesn't guard against it being null (e.g., concurrent `Dispose()`), which can cause a `NullReferenceException` at `mgr.Acquire()`. Check for null inside the lock (or hold the lock while also checking the "built" condition) and return 0 / throw an `IllegalStateException` consistently.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Backport fixes for AnalyzingInfixSuggester [lucenenet]
Posted by "paulirwin (via GitHub)" <gi...@apache.org>.
paulirwin commented on code in PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259#discussion_r3101649856
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -594,8 +707,19 @@ public virtual IList<LookupResult> DoLookup(string key, IEnumerable<BytesRef> co
// We sorted postings by weight during indexing, so we
// only retrieve the first num hits now:
ICollector c2 = new EarlyTerminatingSortingCollector(c, SORT, num);
- IndexSearcher searcher = m_searcherMgr.Acquire();
IList<LookupResult> results = null;
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
Review Comment:
The code as-is is a faithful port of the upstream Java version.
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -835,11 +959,14 @@ protected virtual void Dispose(bool disposing) // LUCENENET specific - implement
m_searcherMgr.Dispose();
m_searcherMgr = null;
}
- if (writer != null)
+ if (m_writer != null)
+ {
+ m_writer.Dispose();
+ m_writer = null;
+ }
+ if (dir != null) // LUCENENET specific - Support for LUCENE-7564. Close dir even when writer is null.
{
- writer.Dispose();
dir.Dispose();
- writer = null;
}
}
Review Comment:
The code as-is is a faithful port of the upstream Java version.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Backport fixes for AnalyzingInfixSuggester [lucenenet]
Posted by "paulirwin (via GitHub)" <gi...@apache.org>.
paulirwin commented on code in PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259#discussion_r3101650971
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -851,7 +978,18 @@ public override long GetSizeInBytes()
{
if (m_searcherMgr != null)
{
- IndexSearcher searcher = m_searcherMgr.Acquire();
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
Review Comment:
The code as-is is a faithful port of the upstream Java version.
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -884,14 +1022,25 @@ public override long Count
{
return 0;
}
- IndexSearcher searcher = m_searcherMgr.Acquire();
+ SearcherManager mgr; // LUCENENET specific - Support for LUCENE-7564: acquire & release on same SearcherManager, via local reference
+ IndexSearcher searcher;
+ UninterruptableMonitor.Enter(searcherMgrLock);
+ try
+ {
+ mgr = m_searcherMgr;
+ searcher = mgr.Acquire();
+ }
Review Comment:
The code as-is is a faithful port of the upstream Java version.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Backport fixes for AnalyzingInfixSuggester [lucenenet]
Posted by "paulirwin (via GitHub)" <gi...@apache.org>.
paulirwin commented on code in PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259#discussion_r3093389885
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -423,11 +534,16 @@ private Document BuildDocument(BytesRef text, IEnumerable<BytesRef> contexts, lo
/// </summary>
public virtual void Refresh()
{
- if (m_searcherMgr is null) // LUCENENET specific -Support for LUCENE-5889.
+ if (m_searcherMgr is null) // LUCENENET specific - Support for LUCENE-5889.
{
throw IllegalStateException.Create("suggester was not built");
}
- m_searcherMgr.MaybeRefreshBlocking();
+ if (writer != null) // LUCENENET specific - Support for LUCENE-7564.
+ {
+ m_searcherMgr.MaybeRefreshBlocking();
+ }
+ // else no-op: writer was committed and closed after the index was built
+ // and before searcherMgr was constructed, so refresh is unnecessary
Review Comment:
This comment matches upstream.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Issue/1242 [lucenenet]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259#discussion_r3089846567
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -227,75 +297,99 @@ protected internal virtual Directory GetDirectory(DirectoryInfo path)
public override void Build(IInputEnumerator enumerator)
{
- if (m_searcherMgr != null)
- {
- m_searcherMgr.Dispose();
- m_searcherMgr = null;
- }
-
- if (writer != null)
- {
- writer.Dispose();
- writer = null;
- }
-
- AtomicReader r = null;
- bool success = false;
+ UninterruptableMonitor.Enter(searcherMgrLock);
try
{
- // First pass: build a temporary normal Lucene index,
- // just indexing the suggestions as they iterate:
- writer = new IndexWriter(dir, indexWriterConfigFactory.Get(matchVersion, GetGramAnalyzer(), OpenMode.CREATE));
- //long t0 = System.nanoTime();
+ if (m_searcherMgr != null)
+ {
+ m_searcherMgr.Dispose();
+ m_searcherMgr = null;
+ }
+
+ if (writer != null)
+ {
+ writer.Dispose();
+ writer = null;
+ }
- // TODO: use threads?
- BytesRef text;
- while (enumerator.MoveNext())
+ AtomicReader r = null;
+ bool success = false;
+ try
{
- text = enumerator.Current;
- BytesRef payload;
- if (enumerator.HasPayloads)
+ // First pass: build a temporary normal Lucene index,
+ // just indexing the suggestions as they iterate:
+ writer = new IndexWriter(dir, indexWriterConfigFactory.Get(matchVersion, GetGramAnalyzer(), OpenMode.CREATE));
+ //long t0 = System.nanoTime();
+
+ // TODO: use threads?
+ BytesRef text;
+ while (enumerator.MoveNext())
{
- payload = enumerator.Payload;
+ text = enumerator.Current;
+ BytesRef payload;
+ if (enumerator.HasPayloads)
+ {
+ payload = enumerator.Payload;
+ }
+ else
+ {
+ payload = null;
+ }
+
+ Add(text, enumerator.Contexts, enumerator.Weight, payload);
}
- else
+
+ //System.out.println("initial indexing time: " + ((System.nanoTime()-t0)/1000000) + " msec");
+ if (commitOnBuild || closeIndexWriterOnBuild) // LUCENENET specific - Support for LUCENE-5889, LUCENE-7564.
{
- payload = null;
+ Commit();
}
-
- Add(text, enumerator.Contexts, enumerator.Weight, payload);
+ m_searcherMgr = new SearcherManager(writer, true, null);
+ success = true;
}
-
- //System.out.println("initial indexing time: " + ((System.nanoTime()-t0)/1000000) + " msec");
- if (commitOnBuild) //LUCENENET specific -Support for LUCENE - 5889.
+ finally
{
- Commit();
+ if (success)
+ {
+ if (closeIndexWriterOnBuild) // LUCENENET specific - Support for LUCENE-7564.
+ {
+ writer.Dispose();
+ writer = null;
+ }
+ IOUtils.Dispose(r);
+ }
+ else
+ {
+ if (writer != null)
+ {
+ writer.Rollback();
+ writer = null;
+ }
+ IOUtils.DisposeWhileHandlingException(r);
+ }
Review Comment:
`AtomicReader r` is declared but never assigned/used, and the subsequent `IOUtils.Dispose(r)` / `DisposeWhileHandlingException(r)` calls are now effectively dead code. This can trigger compiler warnings and makes the Build() control flow harder to follow. Consider removing `r` (and the related dispose calls) or reintroducing the reader usage if it’s still needed.
##########
src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingInfixSuggesterTest.cs:
##########
@@ -1033,6 +1034,145 @@ private ISet<BytesRef> AsSet(params string[] values)
return result;
}
+ // LUCENENET specific - helper subclass for LUCENE-7564 tests.
+ // Exposes writer and searcherMgr for assertions.
+ internal class MyAnalyzingInfixSuggester : AnalyzingInfixSuggester
+ {
+ public MyAnalyzingInfixSuggester(Store.Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer,
Review Comment:
`Store.Directory` doesn’t resolve in this file (there’s no `Store` namespace alias/import). This constructor parameter should use `Lucene.Net.Store.Directory` (optionally via a `using Directory = ...` alias) to compile.
```suggestion
public MyAnalyzingInfixSuggester(Lucene.Net.Store.Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer,
```
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -423,11 +534,16 @@ private Document BuildDocument(BytesRef text, IEnumerable<BytesRef> contexts, lo
/// </summary>
public virtual void Refresh()
{
- if (m_searcherMgr is null) // LUCENENET specific -Support for LUCENE-5889.
+ if (m_searcherMgr is null) // LUCENENET specific - Support for LUCENE-5889.
{
throw IllegalStateException.Create("suggester was not built");
}
- m_searcherMgr.MaybeRefreshBlocking();
+ if (writer != null) // LUCENENET specific - Support for LUCENE-7564.
+ {
+ m_searcherMgr.MaybeRefreshBlocking();
+ }
+ // else no-op: writer was committed and closed after the index was built
+ // and before searcherMgr was constructed, so refresh is unnecessary
Review Comment:
The comment explaining why `Refresh()` is a no-op when `writer == null` is inaccurate: it says the writer was closed “before searcherMgr was constructed”, but in `Build()` the `SearcherManager` is created first and then the writer is disposed. Please update the comment to match the actual lifecycle (writer closed after `SearcherManager` construction, making refresh impossible/unnecessary).
```suggestion
// and after searcherMgr was constructed, so refresh is impossible/unnecessary
```
##########
src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingInfixSuggesterTest.cs:
##########
@@ -1033,6 +1034,145 @@ private ISet<BytesRef> AsSet(params string[] values)
return result;
}
+ // LUCENENET specific - helper subclass for LUCENE-7564 tests.
+ // Exposes writer and searcherMgr for assertions.
+ internal class MyAnalyzingInfixSuggester : AnalyzingInfixSuggester
+ {
+ public MyAnalyzingInfixSuggester(Store.Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer,
+ int minPrefixChars, bool commitOnBuild, bool closeIndexWriterOnBuild)
+ : base(TEST_VERSION_CURRENT, dir, indexAnalyzer, queryAnalyzer, minPrefixChars, commitOnBuild, closeIndexWriterOnBuild)
+ {
+ }
+
+ public IndexWriter GetIndexWriter()
+ {
+ return writer;
+ }
+
+ public SearcherManager GetSearcherManager()
+ {
+ return m_searcherMgr;
+ }
+ }
+
+ // LUCENENET specific - backported from LUCENE-7564, with additions from LUCENE-7670.
+ [Test]
+ public void TestCloseIndexWriterOnBuild()
+ {
+ Input[] sharedInputs = new Input[]
+ {
+ new Input("lend me your ear", 8, new BytesRef("foobar")),
+ new Input("a penny saved is a penny earned", 10, new BytesRef("foobaz")),
+ };
+
+ // After Build(), when closeIndexWriterOnBuild = true:
+ // * The IndexWriter should be null
+ // * The SearcherManager should be non-null
+ // * SearcherManager's IndexWriter reference should be closed
+ // (as evidenced by MaybeRefreshBlocking() throwing AlreadyClosedException)
+ Analyzer a = new MockAnalyzer(Random, MockTokenizer.WHITESPACE, false);
+ DirectoryInfo tempDir = CreateTempDir("analyzingInfixContext");
+ MyAnalyzingInfixSuggester suggester = new MyAnalyzingInfixSuggester(NewFSDirectory(tempDir), a, a, 3, false, true);
+ suggester.Build(new InputArrayEnumerator(sharedInputs));
+ assertNull(suggester.GetIndexWriter());
+ assertNotNull(suggester.GetSearcherManager());
+ Assert.Throws<ObjectDisposedException>(() => suggester.GetSearcherManager().MaybeRefreshBlocking());
Review Comment:
The assertion expects `ObjectDisposedException` from `MaybeRefreshBlocking()`, but the preceding comment says the behavior is evidenced by throwing `AlreadyClosedException`. Since Lucene.NET maps `AlreadyClosedException` to `ObjectDisposedException`, consider updating the comment to avoid implying a different exception type than the test is checking for.
##########
src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingInfixSuggester.cs:
##########
@@ -227,75 +297,99 @@ protected internal virtual Directory GetDirectory(DirectoryInfo path)
public override void Build(IInputEnumerator enumerator)
{
- if (m_searcherMgr != null)
- {
- m_searcherMgr.Dispose();
- m_searcherMgr = null;
- }
-
- if (writer != null)
- {
- writer.Dispose();
- writer = null;
- }
-
- AtomicReader r = null;
- bool success = false;
+ UninterruptableMonitor.Enter(searcherMgrLock);
try
{
- // First pass: build a temporary normal Lucene index,
- // just indexing the suggestions as they iterate:
- writer = new IndexWriter(dir, indexWriterConfigFactory.Get(matchVersion, GetGramAnalyzer(), OpenMode.CREATE));
- //long t0 = System.nanoTime();
+ if (m_searcherMgr != null)
+ {
+ m_searcherMgr.Dispose();
+ m_searcherMgr = null;
+ }
+
+ if (writer != null)
+ {
+ writer.Dispose();
+ writer = null;
+ }
- // TODO: use threads?
- BytesRef text;
- while (enumerator.MoveNext())
+ AtomicReader r = null;
+ bool success = false;
+ try
{
- text = enumerator.Current;
- BytesRef payload;
- if (enumerator.HasPayloads)
+ // First pass: build a temporary normal Lucene index,
+ // just indexing the suggestions as they iterate:
+ writer = new IndexWriter(dir, indexWriterConfigFactory.Get(matchVersion, GetGramAnalyzer(), OpenMode.CREATE));
+ //long t0 = System.nanoTime();
+
+ // TODO: use threads?
+ BytesRef text;
+ while (enumerator.MoveNext())
{
- payload = enumerator.Payload;
+ text = enumerator.Current;
+ BytesRef payload;
+ if (enumerator.HasPayloads)
+ {
+ payload = enumerator.Payload;
+ }
+ else
+ {
+ payload = null;
+ }
+
+ Add(text, enumerator.Contexts, enumerator.Weight, payload);
}
- else
+
+ //System.out.println("initial indexing time: " + ((System.nanoTime()-t0)/1000000) + " msec");
+ if (commitOnBuild || closeIndexWriterOnBuild) // LUCENENET specific - Support for LUCENE-5889, LUCENE-7564.
{
- payload = null;
+ Commit();
}
-
- Add(text, enumerator.Contexts, enumerator.Weight, payload);
+ m_searcherMgr = new SearcherManager(writer, true, null);
+ success = true;
}
-
- //System.out.println("initial indexing time: " + ((System.nanoTime()-t0)/1000000) + " msec");
- if (commitOnBuild) //LUCENENET specific -Support for LUCENE - 5889.
+ finally
{
- Commit();
+ if (success)
+ {
+ if (closeIndexWriterOnBuild) // LUCENENET specific - Support for LUCENE-7564.
+ {
+ writer.Dispose();
+ writer = null;
+ }
+ IOUtils.Dispose(r);
+ }
+ else
+ {
+ if (writer != null)
+ {
+ writer.Rollback();
+ writer = null;
+ }
+ IOUtils.DisposeWhileHandlingException(r);
+ }
}
- m_searcherMgr = new SearcherManager(writer, true, null);
- success = true;
}
finally
{
- if (success)
- {
- IOUtils.Dispose(r);
- }
- else
- {
- IOUtils.DisposeWhileHandlingException(writer, r);
- writer = null;
- }
+ UninterruptableMonitor.Exit(searcherMgrLock);
}
}
- // LUCENENET specific -Support for LUCENE-5889.
+ // LUCENENET specific - Support for LUCENE-5889, LUCENE-7564.
public void Commit()
{
if (writer is null)
{
- throw IllegalStateException.Create("Cannot commit on an closed writer. Add documents first");
+ if (m_searcherMgr is null || closeIndexWriterOnBuild == false)
+ {
+ throw IllegalStateException.Create("Cannot commit on an closed writer. Add documents first");
Review Comment:
Error message grammar: "Cannot commit on an closed writer" should be "a closed writer" (and possibly clarify the action, e.g., commit on a closed IndexWriter).
```suggestion
throw IllegalStateException.Create("Cannot commit on a closed IndexWriter. Add documents first.");
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Backport fixes for AnalyzingInfixSuggester [lucenenet]
Posted by "paulirwin (via GitHub)" <gi...@apache.org>.
paulirwin merged PR #1259:
URL: https://github.com/apache/lucenenet/pull/1259
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@lucenenet.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org