You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by di...@apache.org on 2011/05/17 22:05:21 UTC
[Lucene.Net] svn commit: r1104510 - in /incubator/lucene.net/branches/Lucene.Net_2_9_4g:
src/core/Search/ test/core/Search/
Author: digy
Date: Tue May 17 20:05:20 2011
New Revision: 1104510
URL: http://svn.apache.org/viewvc?rev=1104510&view=rev
Log:
[LUCENENET-412]
Modified:
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingSpanFilter.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingWrapperFilter.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/DocIdSet.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSet.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSetIterator.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/JustCompileSearch.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestCachingWrapperFilter.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestDocIdSet.cs
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingSpanFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingSpanFilter.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingSpanFilter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingSpanFilter.cs Tue May 17 20:05:20 2011
@@ -33,7 +33,7 @@ namespace Lucene.Net.Search
/// <summary> A transient Filter cache.</summary>
[NonSerialized]
- internal CachingWrapperFilter.FilterCache cache;
+ internal CachingWrapperFilter.FilterCache<SpanFilterResult> cache;
/// <summary>
/// New deletions always result in a cache miss, by default
@@ -57,19 +57,11 @@ namespace Lucene.Net.Search
{
throw new System.ArgumentException("DeletesMode.DYNAMIC is not supported");
}
- this.cache = new AnonymousFilterCache(deletesMode);
- }
-
- class AnonymousFilterCache : CachingWrapperFilter.FilterCache
- {
- public AnonymousFilterCache(CachingWrapperFilter.DeletesMode deletesMode) : base(deletesMode)
- {
- }
-
- protected override object MergeDeletes(IndexReader reader, object docIdSet)
- {
- throw new System.ArgumentException("DeletesMode.DYNAMIC is not supported");
- }
+ this.cache = new CachingWrapperFilter.FilterCache<SpanFilterResult>(deletesMode,
+ (r, value) =>
+ {
+ throw new System.ArgumentException("DeletesMode.DYNAMIC is not supported");
+ });
}
/// <deprecated> Use {@link #GetDocIdSet(IndexReader)} instead.
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingWrapperFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingWrapperFilter.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingWrapperFilter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/CachingWrapperFilter.cs Tue May 17 20:05:20 2011
@@ -67,34 +67,35 @@ namespace Lucene.Net.Search
public static DeletesMode DYNAMIC = new DeletesMode("DYNAMIC");
}
- internal FilterCache cache;
+ internal FilterCache<DocIdSet> cache;
[Serializable]
- abstract internal class FilterCache
+ internal class FilterCache<T>
{
/**
* A transient Filter cache (package private because of test)
*/
// NOTE: not final so that we can dynamically re-init
// after de-serialize
- volatile IDictionary cache;
+ volatile IDictionary<object,T> cache;
private DeletesMode deletesMode;
- public FilterCache(DeletesMode deletesMode)
+ public FilterCache(DeletesMode deletesMode, Func<IndexReader, object, object> mergeDeletes)
{
this.deletesMode = deletesMode;
+ this.MergeDeletes = mergeDeletes;
}
- public Object Get(IndexReader reader, object coreKey, object delCoreKey)
+ public T Get(IndexReader reader, object coreKey, object delCoreKey)
{
lock (this)
{
- object value;
+ T value;
if (cache == null)
{
- cache = new Support.WeakHashTable();
+ cache = new Support.WeakDictionary<object,T>();
}
if (deletesMode == DeletesMode.IGNORE)
@@ -122,7 +123,7 @@ namespace Lucene.Net.Search
value = cache[coreKey];
if (value != null && reader.HasDeletions())
{
- value = MergeDeletes(reader, value);
+ value = (T)MergeDeletes(reader, value);
}
}
}
@@ -131,9 +132,10 @@ namespace Lucene.Net.Search
}
- protected abstract object MergeDeletes(IndexReader reader, object value);
+ //protected abstract object MergeDeletes(IndexReader reader, object value);
+ Func<IndexReader, object, object> MergeDeletes;
- public void Put(object coreKey, object delCoreKey, object value)
+ public void Put(object coreKey, object delCoreKey, T value)
{
if (deletesMode == DeletesMode.IGNORE)
{
@@ -176,7 +178,14 @@ namespace Lucene.Net.Search
public CachingWrapperFilter(Filter filter, DeletesMode deletesMode)
{
this.filter = filter;
- cache = new AnonymousFilterCache(deletesMode);
+ cache = new FilterCache<DocIdSet>(deletesMode,
+ (reader,docIdSet)=>{
+ return new FilteredDocIdSet((DocIdSet)docIdSet,
+ (docid) =>
+ {
+ return !reader.IsDeleted(docid);
+ });
+ });
//cache = new FilterCache(deletesMode)
// {
@@ -189,62 +198,6 @@ namespace Lucene.Net.Search
// }
//};
}
-
- class AnonymousFilterCache : FilterCache
- {
- class AnonymousFilteredDocIdSet : FilteredDocIdSet
- {
- IndexReader r;
- public AnonymousFilteredDocIdSet(DocIdSet innerSet, IndexReader r) : base(innerSet)
- {
- this.r = r;
- }
- public override bool Match(int docid)
- {
- return !r.IsDeleted(docid);
- }
- }
-
- public AnonymousFilterCache(DeletesMode deletesMode) : base(deletesMode)
- {
- }
-
- protected override object MergeDeletes(IndexReader reader, object docIdSet)
- {
- return new AnonymousFilteredDocIdSet((DocIdSet)docIdSet, reader);
- }
- }
-
- /// <deprecated> Use {@link #GetDocIdSet(IndexReader)} instead.
- /// </deprecated>
- [Obsolete("Use GetDocIdSet(IndexReader) instead.")]
- public override System.Collections.BitArray Bits(IndexReader reader)
- {
- object coreKey = reader.GetFieldCacheKey();
- object delCoreKey = reader.HasDeletions() ? reader.GetDeletesCacheKey() : coreKey;
-
- object cached = cache.Get(reader, coreKey, delCoreKey);
-
- if (cached != null)
- {
- if (cached is System.Collections.BitArray)
- {
- return (System.Collections.BitArray) cached;
- }
- else if (cached is DocIdBitSet)
- return ((DocIdBitSet) cached).GetBitSet();
- // It would be nice to handle the DocIdSet case, but that's not really possible
- }
-
- System.Collections.BitArray bits = filter.Bits(reader);
-
- if (bits != null)
- {
- cache.Put(coreKey, delCoreKey, bits);
- }
-
- return bits;
- }
/// <summary>Provide the DocIdSet to be cached, using the DocIdSet provided
/// by the wrapped Filter.
@@ -278,26 +231,24 @@ namespace Lucene.Net.Search
object coreKey = reader.GetFieldCacheKey();
object delCoreKey = reader.HasDeletions() ? reader.GetDeletesCacheKey() : coreKey;
- object cached = cache.Get(reader, coreKey, delCoreKey);
-
- if (cached != null)
- {
+ DocIdSet docIdSet = cache.Get(reader, coreKey, delCoreKey);
+ if (docIdSet != null)
+ {
hitCount++;
- if (cached is DocIdSet)
- return (DocIdSet) cached;
- else
- return new DocIdBitSet((System.Collections.BitArray) cached);
- }
+ return docIdSet;
+ }
+
missCount++;
+
// cache miss
- DocIdSet docIdSet = DocIdSetToCache(filter.GetDocIdSet(reader), reader);
-
- if (docIdSet != null)
- {
+ docIdSet = DocIdSetToCache(filter.GetDocIdSet(reader), reader);
+
+ if (docIdSet != null)
+ {
cache.Put(coreKey, delCoreKey, docIdSet);
- }
-
- return docIdSet;
+ }
+
+ return docIdSet;
}
public override System.String ToString()
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/DocIdSet.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/DocIdSet.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/DocIdSet.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/DocIdSet.cs Tue May 17 20:05:20 2011
@@ -26,31 +26,17 @@ namespace Lucene.Net.Search
[Serializable]
public abstract class DocIdSet
{
- public class AnonymousClassDocIdSet:DocIdSet
+ internal class AnonymousDocIdSet:DocIdSet
{
- public AnonymousClassDocIdSet()
+ private DocIdSetIterator iterator;
+
+ public AnonymousDocIdSet()
{
- InitBlock();
+ iterator = new AnonymousDocIdSetIterator();
}
- public class AnonymousClassDocIdSetIterator:DocIdSetIterator
+
+ class AnonymousDocIdSetIterator:DocIdSetIterator
{
- public AnonymousClassDocIdSetIterator(AnonymousClassDocIdSet enclosingInstance)
- {
- InitBlock(enclosingInstance);
- }
- private void InitBlock(AnonymousClassDocIdSet enclosingInstance)
- {
- this.enclosingInstance = enclosingInstance;
- }
- private AnonymousClassDocIdSet enclosingInstance;
- public AnonymousClassDocIdSet Enclosing_Instance
- {
- get
- {
- return enclosingInstance;
- }
-
- }
public override int Advance(int target)
{
return NO_MORE_DOCS;
@@ -64,13 +50,7 @@ namespace Lucene.Net.Search
return NO_MORE_DOCS;
}
}
- private void InitBlock()
- {
- iterator = new AnonymousClassDocIdSetIterator(this);
- }
-
- private DocIdSetIterator iterator;
-
+
public override DocIdSetIterator Iterator()
{
return iterator;
@@ -105,7 +85,7 @@ namespace Lucene.Net.Search
}
static DocIdSet()
{
- EMPTY_DOCIDSET = new AnonymousClassDocIdSet();
+ EMPTY_DOCIDSET = new AnonymousDocIdSet();
}
}
}
\ No newline at end of file
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSet.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSet.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSet.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSet.cs Tue May 17 20:05:20 2011
@@ -39,45 +39,17 @@ namespace Lucene.Net.Search
/// <seealso cref="DocIdSet">
/// </seealso>
- public abstract class FilteredDocIdSet:DocIdSet
+ public class FilteredDocIdSet:DocIdSet
{
- private class AnonymousClassFilteredDocIdSetIterator:FilteredDocIdSetIterator
- {
- public AnonymousClassFilteredDocIdSetIterator(FilteredDocIdSet enclosingInstance) : base(null)
- {
- System.Diagnostics.Debug.Fail("Port issue:", "Lets see if we need this"); // {{Aroush-2.9}}
- InitBlock(enclosingInstance);
- }
- private void InitBlock(FilteredDocIdSet enclosingInstance)
- {
- this.enclosingInstance = enclosingInstance;
- }
- private FilteredDocIdSet enclosingInstance;
- public FilteredDocIdSet Enclosing_Instance
- {
- get
- {
- return enclosingInstance;
- }
-
- }
- internal AnonymousClassFilteredDocIdSetIterator(FilteredDocIdSet enclosingInstance, Lucene.Net.Search.DocIdSetIterator Param1):base(Param1)
- {
- InitBlock(enclosingInstance);
- }
- public /*protected internal*/ override bool Match(int docid)
- {
- return Enclosing_Instance.Match(docid);
- }
- }
private DocIdSet _innerSet;
/// <summary> Constructor.</summary>
/// <param name="innerSet">Underlying DocIdSet
/// </param>
- public FilteredDocIdSet(DocIdSet innerSet)
+ public FilteredDocIdSet(DocIdSet innerSet,Func<int,bool> match)
{
_innerSet = innerSet;
+ this.Match = match;
}
/// <summary>This DocIdSet implementation is cacheable if the inner set is cacheable. </summary>
@@ -91,7 +63,8 @@ namespace Lucene.Net.Search
/// </param>
/// <returns> true if input docid should be in the result set, false otherwise.
/// </returns>
- public /*protected internal*/ abstract bool Match(int docid);
+ //public /*protected internal*/ abstract bool Match(int docid);
+ Func<int, bool> Match;
/// <summary> Implementation of the contract to build a DocIdSetIterator.</summary>
/// <seealso cref="DocIdSetIterator">
@@ -101,7 +74,10 @@ namespace Lucene.Net.Search
// @Override
public override DocIdSetIterator Iterator()
{
- return new AnonymousClassFilteredDocIdSetIterator(this, _innerSet.Iterator());
+ return new FilteredDocIdSetIterator(_innerSet.Iterator(), (docid) =>
+ {
+ return this.Match(docid);
+ });
}
}
}
\ No newline at end of file
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSetIterator.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSetIterator.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSetIterator.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/core/Search/FilteredDocIdSetIterator.cs Tue May 17 20:05:20 2011
@@ -25,7 +25,7 @@ namespace Lucene.Net.Search
/// mechanism on an underlying DocIdSetIterator. See {@link
/// FilteredDocIdSet}.
/// </summary>
- public abstract class FilteredDocIdSetIterator:DocIdSetIterator
+ public class FilteredDocIdSetIterator:DocIdSetIterator
{
protected internal DocIdSetIterator _innerIter;
private int doc;
@@ -33,7 +33,7 @@ namespace Lucene.Net.Search
/// <summary> Constructor.</summary>
/// <param name="innerIter">Underlying DocIdSetIterator.
/// </param>
- public FilteredDocIdSetIterator(DocIdSetIterator innerIter)
+ public FilteredDocIdSetIterator(DocIdSetIterator innerIter, Func<int, bool> match)
{
if (innerIter == null)
{
@@ -41,6 +41,7 @@ namespace Lucene.Net.Search
}
_innerIter = innerIter;
doc = - 1;
+ this.Match = match;
}
/// <summary> Validation method to determine whether a docid should be in the result set.</summary>
@@ -50,7 +51,8 @@ namespace Lucene.Net.Search
/// </returns>
/// <seealso cref="FilteredDocIdSetIterator(DocIdSetIterator)">
/// </seealso>
- public abstract /*protected internal*/ bool Match(int doc);
+ //public abstract /*protected internal*/ bool Match(int doc);
+ Func<int, bool> Match;
/// <deprecated> use {@link #DocID()} instead.
/// </deprecated>
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/JustCompileSearch.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/JustCompileSearch.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/JustCompileSearch.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/JustCompileSearch.cs Tue May 17 20:05:20 2011
@@ -300,32 +300,6 @@ namespace Lucene.Net.Search
// still added here in case someone will add abstract methods in the future.
}
- internal sealed class JustCompileFilteredDocIdSet:FilteredDocIdSet
- {
-
- public JustCompileFilteredDocIdSet(DocIdSet innerSet):base(innerSet)
- {
- }
-
- public /*protected internal*/ override bool Match(int docid)
- {
- throw new System.NotSupportedException(Lucene.Net.Search.JustCompileSearch.UNSUPPORTED_MSG);
- }
- }
-
- internal sealed class JustCompileFilteredDocIdSetIterator:FilteredDocIdSetIterator
- {
-
- public JustCompileFilteredDocIdSetIterator(DocIdSetIterator innerIter):base(innerIter)
- {
- }
-
- public /*protected internal*/ override bool Match(int doc)
- {
- throw new System.NotSupportedException(Lucene.Net.Search.JustCompileSearch.UNSUPPORTED_MSG);
- }
- }
-
internal sealed class JustCompileFilteredTermEnum:FilteredTermEnum
{
@@ -355,19 +329,6 @@ namespace Lucene.Net.Search
}
}
- /*internal sealed class JustCompilePhraseScorer : Lucene.Net.Search.PhraseScorer // {{Not needed for Lucene.Net}}
- {
-
- internal JustCompilePhraseScorer(Weight weight, TermPositions[] tps, int[] offsets, Similarity similarity, sbyte[] norms):base(weight, tps, offsets, similarity, norms)
- {
- }
-
- protected internal override float PhraseFreq()
- {
- throw new System.NotSupportedException(Lucene.Net.Search.JustCompileSearch.UNSUPPORTED_MSG);
- }
- }*/
-
[Serializable]
internal sealed class JustCompileQuery:Query
{
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestCachingWrapperFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestCachingWrapperFilter.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestCachingWrapperFilter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestCachingWrapperFilter.cs Tue May 17 20:05:20 2011
@@ -41,23 +41,22 @@ namespace Lucene.Net.Search
IndexWriter writer = new IndexWriter(dir, new KeywordAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
writer.Close();
- IndexReader reader = IndexReader.Open(dir);
+ IndexReader reader = IndexReader.Open(dir, true);
MockFilter filter = new MockFilter();
CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
// first time, nested filter is called
cacher.GetDocIdSet(reader);
- Assert.IsTrue(filter.WasCalled(), "first time");
+ Assert.IsTrue( filter.WasCalled(),"first time");
- // make sure no exception if cache is holding the wrong bitset
- cacher.Bits(reader);
+ // make sure no exception if cache is holding the wrong docIdSet
cacher.GetDocIdSet(reader);
// second time, nested filter should not be called
filter.Clear();
cacher.GetDocIdSet(reader);
- Assert.IsFalse(filter.WasCalled(), "second time");
+ Assert.IsFalse(filter.WasCalled(),"second time" );
reader.Close();
}
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestDocIdSet.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestDocIdSet.cs?rev=1104510&r1=1104509&r2=1104510&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestDocIdSet.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/test/core/Search/TestDocIdSet.cs Tue May 17 20:05:20 2011
@@ -133,32 +133,8 @@ namespace Lucene.Net.Search
return new AnonymousClassDocIdSetIterator(maxdoc, this);
}
}
- private class AnonymousClassFilteredDocIdSet:FilteredDocIdSet
- {
- private void InitBlock(TestDocIdSet enclosingInstance)
- {
- this.enclosingInstance = enclosingInstance;
- }
- private TestDocIdSet enclosingInstance;
- public TestDocIdSet Enclosing_Instance
- {
- get
- {
- return enclosingInstance;
- }
-
- }
- internal AnonymousClassFilteredDocIdSet(TestDocIdSet enclosingInstance, Lucene.Net.Search.DocIdSet Param1):base(Param1)
- {
- InitBlock(enclosingInstance);
- }
- // @Override
- public /*protected internal*/ override bool Match(int docid)
- {
- return docid % 2 == 0; //validate only even docids
- }
- }
- [Serializable]
+
+ [Serializable]
private class AnonymousClassFilter:Filter
{
public AnonymousClassFilter(TestDocIdSet enclosingInstance)
@@ -188,9 +164,12 @@ namespace Lucene.Net.Search
{
int maxdoc = 10;
DocIdSet innerSet = new AnonymousClassDocIdSet_Renamed_Class(maxdoc, this);
-
-
- DocIdSet filteredSet = new AnonymousClassFilteredDocIdSet(this, innerSet);
+
+
+ DocIdSet filteredSet = new FilteredDocIdSet(innerSet, (docid) =>
+ {
+ return docid % 2 == 0; //validate only even docids
+ });
DocIdSetIterator iter = filteredSet.Iterator();
System.Collections.ArrayList list = new System.Collections.ArrayList();