You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by sy...@apache.org on 2014/11/14 12:59:27 UTC
[12/26] lucenenet git commit: first commit of facet porting,
failing tests will be fixed in next commits.
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/Lucene.Net.Facet/TopOrdAndIntQueue.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Facet/TopOrdAndIntQueue.cs b/Lucene.Net.Facet/TopOrdAndIntQueue.cs
new file mode 100644
index 0000000..63711f2
--- /dev/null
+++ b/Lucene.Net.Facet/TopOrdAndIntQueue.cs
@@ -0,0 +1,76 @@
+using Lucene.Net.Util;
+
+namespace Lucene.Net.Facet
+{
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ using Lucene.Net.Util;
+
+ /// <summary>
+ /// Keeps highest results, first by largest int value,
+ /// then tie break by smallest ord.
+ /// </summary>
+ public class TopOrdAndIntQueue : PriorityQueue<TopOrdAndIntQueue.OrdAndValue>
+ {
+
+ /// <summary>
+ /// Holds a single entry. </summary>
+ public sealed class OrdAndValue
+ {
+
+ /// <summary>
+ /// Ordinal of the entry. </summary>
+ public int ord;
+
+ /// <summary>
+ /// Value associated with the ordinal. </summary>
+ public int value;
+
+ /// <summary>
+ /// Default constructor. </summary>
+ public OrdAndValue()
+ {
+ }
+ }
+
+ /// <summary>
+ /// Sole constructor. </summary>
+ public TopOrdAndIntQueue(int topN)
+ : base(topN, false)
+ {
+ }
+
+ public override bool LessThan(OrdAndValue a, OrdAndValue b)
+ {
+ if (a.value < b.value)
+ {
+ return true;
+ }
+ else if (a.value > b.value)
+ {
+ return false;
+ }
+ else
+ {
+ return a.ord > b.ord;
+ }
+ }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/Lucene.Net.sln
----------------------------------------------------------------------
diff --git a/Lucene.Net.sln b/Lucene.Net.sln
index 5da27b0..afc21f4 100644
--- a/Lucene.Net.sln
+++ b/Lucene.Net.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
-VisualStudioVersion = 12.0.30110.0
+VisualStudioVersion = 12.0.30723.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net", "src\Lucene.Net.Core\Lucene.Net.csproj", "{5D4AD9BE-1FFB-41AB-9943-25737971BF57}"
EndProject
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.TestFramework",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Queries", "src\Lucene.Net.Queries\Lucene.Net.Queries.csproj", "{69D7956C-C2CC-4708-B399-A188FEC384C4}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Facet", "Lucene.Net.Facet\Lucene.Net.Facet.csproj", "{48F7884A-9454-4E88-8413-9D35992CB440}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -62,6 +64,16 @@ Global
{69D7956C-C2CC-4708-B399-A188FEC384C4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{69D7956C-C2CC-4708-B399-A188FEC384C4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{69D7956C-C2CC-4708-B399-A188FEC384C4}.Release|x86.ActiveCfg = Release|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {48F7884A-9454-4E88-8413-9D35992CB440}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Index/BinaryDocValuesFieldUpdates.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Index/BinaryDocValuesFieldUpdates.cs b/src/Lucene.Net.Core/Index/BinaryDocValuesFieldUpdates.cs
index 46ef31b..f94da6b 100644
--- a/src/Lucene.Net.Core/Index/BinaryDocValuesFieldUpdates.cs
+++ b/src/Lucene.Net.Core/Index/BinaryDocValuesFieldUpdates.cs
@@ -200,7 +200,7 @@ namespace Lucene.Net.Index
this.DocsWithField = docsWithField;
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
long tmpDoc = Docs.Get(j);
Docs.Set(j, Docs.Get(i));
@@ -233,7 +233,7 @@ namespace Lucene.Net.Index
}
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
int x = (int)Docs.Get(i);
int y = (int)Docs.Get(j);
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Index/NumericDocValuesFieldUpdates.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Index/NumericDocValuesFieldUpdates.cs b/src/Lucene.Net.Core/Index/NumericDocValuesFieldUpdates.cs
index 684f62a..6878b6f 100644
--- a/src/Lucene.Net.Core/Index/NumericDocValuesFieldUpdates.cs
+++ b/src/Lucene.Net.Core/Index/NumericDocValuesFieldUpdates.cs
@@ -172,7 +172,7 @@ namespace Lucene.Net.Index
this.DocsWithField = docsWithField;
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
long tmpDoc = Docs.Get(j);
Docs.Set(j, Docs.Get(i));
@@ -201,7 +201,7 @@ namespace Lucene.Net.Index
}
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
int x = (int)Docs.Get(i);
int y = (int)Docs.Get(j);
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Index/ReaderManager.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Index/ReaderManager.cs b/src/Lucene.Net.Core/Index/ReaderManager.cs
index 835ecf1..e56dab7 100644
--- a/src/Lucene.Net.Core/Index/ReaderManager.cs
+++ b/src/Lucene.Net.Core/Index/ReaderManager.cs
@@ -64,22 +64,22 @@ namespace Lucene.Net.Index
Current = DirectoryReader.Open(dir);
}
- protected internal override void DecRef(DirectoryReader reference)
+ protected override void DecRef(DirectoryReader reference)
{
reference.DecRef();
}
- protected internal override DirectoryReader RefreshIfNeeded(DirectoryReader referenceToRefresh)
+ protected override DirectoryReader RefreshIfNeeded(DirectoryReader referenceToRefresh)
{
return DirectoryReader.OpenIfChanged(referenceToRefresh);
}
- protected internal override bool TryIncRef(DirectoryReader reference)
+ protected override bool TryIncRef(DirectoryReader reference)
{
return reference.TryIncRef();
}
- protected internal override int GetRefCount(DirectoryReader reference)
+ protected override int GetRefCount(DirectoryReader reference)
{
return reference.RefCount;
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Lucene.Net.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Lucene.Net.csproj b/src/Lucene.Net.Core/Lucene.Net.csproj
index 58a6c8a..84ed61d 100644
--- a/src/Lucene.Net.Core/Lucene.Net.csproj
+++ b/src/Lucene.Net.Core/Lucene.Net.csproj
@@ -638,6 +638,7 @@
<Compile Include="Support\PriorityQueue.cs" />
<Compile Include="Support\ReentrantLock.cs" />
<Compile Include="Support\SetExtensions.cs" />
+ <Compile Include="Support\StreamUtils.cs" />
<Compile Include="Support\StringBuilderExtensions.cs" />
<Compile Include="Support\StringCharSequenceWrapper.cs" />
<Compile Include="Support\StringSupport.cs" />
@@ -675,6 +676,7 @@
<Compile Include="Support\ThreadClass.cs" />
<Compile Include="Support\ThreadLock.cs" />
<Compile Include="Support\WeakDictionary.cs" />
+ <Compile Include="Util\Accountable.cs" />
<Compile Include="Util\ArrayInPlaceMergeSorter.cs" />
<Compile Include="Util\ArrayIntroSorter.cs" />
<Compile Include="Util\ArrayTimSorter.cs" />
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Search/CachingWrapperFilter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Search/CachingWrapperFilter.cs b/src/Lucene.Net.Core/Search/CachingWrapperFilter.cs
index 2f2acca..3e2dcef 100644
--- a/src/Lucene.Net.Core/Search/CachingWrapperFilter.cs
+++ b/src/Lucene.Net.Core/Search/CachingWrapperFilter.cs
@@ -99,7 +99,7 @@ namespace Lucene.Net.Search
/// <summary>
/// Default cache implementation: uses <seealso cref="WAH8DocIdSet"/>.
/// </summary>
- protected internal virtual DocIdSet CacheImpl(DocIdSetIterator iterator, AtomicReader reader)
+ protected virtual DocIdSet CacheImpl(DocIdSetIterator iterator, AtomicReader reader)
{
var builder = new WAH8DocIdSet.Builder();
builder.Add(iterator);
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Search/Query.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Search/Query.cs b/src/Lucene.Net.Core/Search/Query.cs
index 5a32b5b..5dbfac1 100644
--- a/src/Lucene.Net.Core/Search/Query.cs
+++ b/src/Lucene.Net.Core/Search/Query.cs
@@ -138,7 +138,7 @@ namespace Lucene.Net.Search
return true;
}
- if (GetType() != obj.GetType())
+ if (obj != null && GetType() != obj.GetType())
return false;
var other = obj as Query;
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Search/ReferenceManager.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Search/ReferenceManager.cs b/src/Lucene.Net.Core/Search/ReferenceManager.cs
index f693d68..4af85e7 100644
--- a/src/Lucene.Net.Core/Search/ReferenceManager.cs
+++ b/src/Lucene.Net.Core/Search/ReferenceManager.cs
@@ -71,20 +71,20 @@ namespace Lucene.Net.Search
/// Decrement reference counting on the given reference. </summary>
/// <exception cref="IOException"> if reference decrement on the given resource failed.
/// </exception>
- protected internal abstract void DecRef(G reference);
+ protected abstract void DecRef(G reference);
/// <summary>
/// Refresh the given reference if needed. Returns {@code null} if no refresh
/// was needed, otherwise a new refreshed reference. </summary>
/// <exception cref="AlreadyClosedException"> if the reference manager has been <seealso cref="#close() closed"/>. </exception>
/// <exception cref="IOException"> if the refresh operation failed </exception>
- protected internal abstract G RefreshIfNeeded(G referenceToRefresh);
+ protected abstract G RefreshIfNeeded(G referenceToRefresh);
/// <summary>
/// Try to increment reference counting on the given reference. Return true if
/// the operation was successful. </summary>
/// <exception cref="AlreadyClosedException"> if the reference manager has been <seealso cref="#close() closed"/>. </exception>
- protected internal abstract bool TryIncRef(G reference);
+ protected abstract bool TryIncRef(G reference);
/// <summary>
/// Obtain the current reference. You must match every call to acquire with one
@@ -161,7 +161,7 @@ namespace Lucene.Net.Search
/// <summary>
/// Returns the current reference count of the given reference.
/// </summary>
- protected internal abstract int GetRefCount(G reference);
+ protected abstract int GetRefCount(G reference);
/// <summary>
/// Called after close(), so subclass can free any resources. </summary>
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Search/SearcherManager.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Search/SearcherManager.cs b/src/Lucene.Net.Core/Search/SearcherManager.cs
index 8c80a43..cc74646 100644
--- a/src/Lucene.Net.Core/Search/SearcherManager.cs
+++ b/src/Lucene.Net.Core/Search/SearcherManager.cs
@@ -110,12 +110,12 @@ namespace Lucene.Net.Search
Current = GetSearcher(searcherFactory, DirectoryReader.Open(dir));
}
- protected internal override void DecRef(IndexSearcher reference)
+ protected override void DecRef(IndexSearcher reference)
{
reference.IndexReader.DecRef();
}
- protected internal override IndexSearcher RefreshIfNeeded(IndexSearcher referenceToRefresh)
+ protected override IndexSearcher RefreshIfNeeded(IndexSearcher referenceToRefresh)
{
IndexReader r = referenceToRefresh.IndexReader;
Debug.Assert(r is DirectoryReader, "searcher's IndexReader should be a DirectoryReader, but got " + r);
@@ -130,12 +130,12 @@ namespace Lucene.Net.Search
}
}
- protected internal override bool TryIncRef(IndexSearcher reference)
+ protected override bool TryIncRef(IndexSearcher reference)
{
return reference.IndexReader.TryIncRef();
}
- protected internal override int GetRefCount(IndexSearcher reference)
+ protected override int GetRefCount(IndexSearcher reference)
{
return reference.IndexReader.RefCount;
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Search/Spans/NearSpansOrdered.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Search/Spans/NearSpansOrdered.cs b/src/Lucene.Net.Core/Search/Spans/NearSpansOrdered.cs
index 76110e5..7b52ebb 100644
--- a/src/Lucene.Net.Core/Search/Spans/NearSpansOrdered.cs
+++ b/src/Lucene.Net.Core/Search/Spans/NearSpansOrdered.cs
@@ -87,12 +87,12 @@ namespace Lucene.Net.Search.Spans
this.OuterInstance = outerInstance;
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
ArrayUtil.Swap(OuterInstance.SubSpansByDoc, i, j);
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return OuterInstance.SubSpansByDoc[i].Doc() - OuterInstance.SubSpansByDoc[j].Doc();
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Support/StreamUtils.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Support/StreamUtils.cs b/src/Lucene.Net.Core/Support/StreamUtils.cs
new file mode 100644
index 0000000..75e7d15
--- /dev/null
+++ b/src/Lucene.Net.Core/Support/StreamUtils.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Lucene.Net.Support
+{
+ public static class StreamUtils
+ {
+ static readonly BinaryFormatter Formatter = new BinaryFormatter();
+
+ public static MemoryStream SerializeToStream(object o)
+ {
+ using (var stream = new MemoryStream())
+ {
+ Formatter.Serialize(stream, o);
+ return stream;
+ }
+ }
+
+ public static object DeserializeFromStream(Stream stream)
+ {
+ stream.Seek(0, SeekOrigin.Begin);
+ object o = Formatter.Deserialize(stream);
+ return o;
+ }
+
+ public static object DeserializeFromStream(BinaryReader reader)
+ {
+ var stream = reader.BaseStream;
+ stream.Seek(0, SeekOrigin.Begin);
+ object o = Formatter.Deserialize(stream);
+ return o;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/Accountable.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/Accountable.cs b/src/Lucene.Net.Core/Util/Accountable.cs
new file mode 100644
index 0000000..9dfa711
--- /dev/null
+++ b/src/Lucene.Net.Core/Util/Accountable.cs
@@ -0,0 +1,36 @@
+namespace Lucene.Net.Util
+{
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /// <summary>
+ /// An object whose RAM usage can be computed.
+ ///
+ /// @lucene.internal
+ /// </summary>
+ public interface Accountable
+ {
+
+ /// <summary>
+ /// Return the memory usage of this object in bytes. Negative values are illegal.
+ /// </summary>
+ long RamBytesUsed();
+
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/ArrayInPlaceMergeSorter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/ArrayInPlaceMergeSorter.cs b/src/Lucene.Net.Core/Util/ArrayInPlaceMergeSorter.cs
index 5465e40..8f1ac0c 100644
--- a/src/Lucene.Net.Core/Util/ArrayInPlaceMergeSorter.cs
+++ b/src/Lucene.Net.Core/Util/ArrayInPlaceMergeSorter.cs
@@ -36,12 +36,12 @@ namespace Lucene.Net.Util
this.Comparator = comparator;
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return Comparator.Compare(Arr[i], Arr[j]);
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
ArrayUtil.Swap(Arr, i, j);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/ArrayIntroSorter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/ArrayIntroSorter.cs b/src/Lucene.Net.Core/Util/ArrayIntroSorter.cs
index b201943..d647621 100644
--- a/src/Lucene.Net.Core/Util/ArrayIntroSorter.cs
+++ b/src/Lucene.Net.Core/Util/ArrayIntroSorter.cs
@@ -38,12 +38,12 @@ namespace Lucene.Net.Util
Pivot_Renamed = default(T);
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return Comparator.Compare(Arr[i], Arr[j]);
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
ArrayUtil.Swap(Arr, i, j);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/ArrayTimSorter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/ArrayTimSorter.cs b/src/Lucene.Net.Core/Util/ArrayTimSorter.cs
index da68492..9364ff0 100644
--- a/src/Lucene.Net.Core/Util/ArrayTimSorter.cs
+++ b/src/Lucene.Net.Core/Util/ArrayTimSorter.cs
@@ -48,12 +48,12 @@ namespace Lucene.Net.Util
}
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return Comparator.Compare(Arr[i], Arr[j]);
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
ArrayUtil.Swap(Arr, i, j);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/BytesRefArray.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/BytesRefArray.cs b/src/Lucene.Net.Core/Util/BytesRefArray.cs
index 2a5eca1..2554c76 100644
--- a/src/Lucene.Net.Core/Util/BytesRefArray.cs
+++ b/src/Lucene.Net.Core/Util/BytesRefArray.cs
@@ -135,14 +135,14 @@ namespace Lucene.Net.Util
scratch2 = new BytesRef();
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
int o = OrderedEntries[i];
OrderedEntries[i] = OrderedEntries[j];
OrderedEntries[j] = o;
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
int idx1 = OrderedEntries[i], idx2 = OrderedEntries[j];
return Comp.Compare(OuterInstance.Get(scratch1, idx1), OuterInstance.Get(scratch2, idx2));
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/BytesRefHash.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/BytesRefHash.cs b/src/Lucene.Net.Core/Util/BytesRefHash.cs
index f1e3ef6..4b762ed 100644
--- a/src/Lucene.Net.Core/Util/BytesRefHash.cs
+++ b/src/Lucene.Net.Core/Util/BytesRefHash.cs
@@ -187,14 +187,14 @@ namespace Lucene.Net.Util
this.Compact = compact;
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
int o = Compact[i];
Compact[i] = Compact[j];
Compact[j] = o;
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
int id1 = Compact[i], id2 = Compact[j];
Debug.Assert(OuterInstance.BytesStart.Length > id1 && OuterInstance.BytesStart.Length > id2);
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/CollectionUtil.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/CollectionUtil.cs b/src/Lucene.Net.Core/Util/CollectionUtil.cs
index fc692fa..3de4d33 100644
--- a/src/Lucene.Net.Core/Util/CollectionUtil.cs
+++ b/src/Lucene.Net.Core/Util/CollectionUtil.cs
@@ -62,12 +62,12 @@ namespace Lucene.Net.Util
}
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
list = list.Swap(i, j);
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return Comp.Compare(list[i], list[j]);
}
@@ -104,7 +104,7 @@ namespace Lucene.Net.Util
}
}
- protected internal override void Swap(int i, int j)
+ protected override void Swap(int i, int j)
{
List = List.Swap(i, j);
}
@@ -127,7 +127,7 @@ namespace Lucene.Net.Util
List[j] = Tmp[i];
}
- protected internal override int Compare(int i, int j)
+ protected override int Compare(int i, int j)
{
return Comp.Compare(List[i], List[j]);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/IOUtils.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/IOUtils.cs b/src/Lucene.Net.Core/Util/IOUtils.cs
index 78236e4..e23d3cd 100644
--- a/src/Lucene.Net.Core/Util/IOUtils.cs
+++ b/src/Lucene.Net.Core/Util/IOUtils.cs
@@ -268,7 +268,7 @@ namespace Lucene.Net.Util
}
else
{
- suppressedExceptions = (List<Exception>) exception.Data["SuppressedExceptions"];
+ suppressedExceptions = (List<Exception>)exception.Data["SuppressedExceptions"];
}
suppressedExceptions.Add(suppressed);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Core/Util/Sorter.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Util/Sorter.cs b/src/Lucene.Net.Core/Util/Sorter.cs
index 979dfce..2176a7b 100644
--- a/src/Lucene.Net.Core/Util/Sorter.cs
+++ b/src/Lucene.Net.Core/Util/Sorter.cs
@@ -38,11 +38,11 @@ namespace Lucene.Net.Util
/// The contract for the returned value is the same as
/// <seealso cref="Comparator#compare(Object, Object)"/>.
/// </summary>
- protected internal abstract int Compare(int i, int j);
+ protected abstract int Compare(int i, int j);
/// <summary>
/// Swap values at slots <code>i</code> and <code>j</code>. </summary>
- protected internal abstract void Swap(int i, int j);
+ protected abstract void Swap(int i, int j);
/// <summary>
/// Sort the slice which starts at <code>from</code> (inclusive) and ends at
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj b/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
index 5b57114..ad426d0 100644
--- a/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
+++ b/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
@@ -65,10 +65,18 @@
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\Lucene.Net.Facet\Lucene.Net.Facet.csproj">
+ <Project>{48f7884a-9454-4e88-8413-9d35992cb440}</Project>
+ <Name>Lucene.Net.Facet</Name>
+ </ProjectReference>
<ProjectReference Include="..\Lucene.Net.Core\Lucene.Net.csproj">
<Project>{5d4ad9be-1ffb-41ab-9943-25737971bf57}</Project>
<Name>Lucene.Net</Name>
</ProjectReference>
+ <ProjectReference Include="..\Lucene.Net.Queries\Lucene.Net.Queries.csproj">
+ <Project>{69d7956c-c2cc-4708-b399-a188fec384c4}</Project>
+ <Name>Lucene.Net.Queries</Name>
+ </ProjectReference>
<ProjectReference Include="..\Lucene.Net.TestFramework\Lucene.Net.TestFramework.csproj">
<Project>{b2c0d749-ce34-4f62-a15e-00cb2ff5ddb3}</Project>
<Name>Lucene.Net.TestFramework</Name>
@@ -149,6 +157,31 @@
<Compile Include="core\Document\TestDateTools.cs" />
<Compile Include="core\Document\TestDocument.cs" />
<Compile Include="core\Document\TestField.cs" />
+ <Compile Include="core\Facet\AssertingSubDocsAtOnceCollector.cs" />
+ <Compile Include="core\Facet\FacetTestCase.cs" />
+ <Compile Include="core\Facet\Range\TestRangeFacetCounts.cs" />
+ <Compile Include="core\Facet\SlowRAMDirectory.cs" />
+ <Compile Include="core\Facet\SortedSet\TestSortedSetDocValuesFacets.cs" />
+ <Compile Include="core\Facet\Taxonomy\Directory\TestAddTaxonomy.cs" />
+ <Compile Include="core\Facet\Taxonomy\Directory\TestConcurrentFacetedIndexing.cs" />
+ <Compile Include="core\Facet\Taxonomy\Directory\TestDirectoryTaxonomyReader.cs" />
+ <Compile Include="core\Facet\Taxonomy\Directory\TestDirectoryTaxonomyWriter.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestCachedOrdinalsReader.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestFacetLabel.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestLRUHashMap.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestSearcherTaxonomyManager.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestTaxonomyCombined.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestTaxonomyFacetAssociations.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestTaxonomyFacetCounts.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestTaxonomyFacetCounts2.cs" />
+ <Compile Include="core\Facet\Taxonomy\TestTaxonomyFacetSumValueSource.cs" />
+ <Compile Include="core\Facet\Taxonomy\WriterCache\TestCharBlockArray.cs" />
+ <Compile Include="core\Facet\Taxonomy\WriterCache\TestCompactLabelToOrdinal.cs" />
+ <Compile Include="core\Facet\TestDrillDownQuery.cs" />
+ <Compile Include="core\Facet\TestDrillSideways.cs" />
+ <Compile Include="core\Facet\TestFacetsConfig.cs" />
+ <Compile Include="core\Facet\TestMultipleIndexFields.cs" />
+ <Compile Include="core\Facet\TestRandomSamplingFacetsCollector.cs" />
<Compile Include="core\Index\BinaryTokenStream.cs" />
<Compile Include="core\Index\Test2BBinaryDocValues.cs" />
<Compile Include="core\Index\Test2BDocs.cs" />
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Tests/core/Facet/AssertingSubDocsAtOnceCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/core/Facet/AssertingSubDocsAtOnceCollector.cs b/src/Lucene.Net.Tests/core/Facet/AssertingSubDocsAtOnceCollector.cs
new file mode 100644
index 0000000..c3730df
--- /dev/null
+++ b/src/Lucene.Net.Tests/core/Facet/AssertingSubDocsAtOnceCollector.cs
@@ -0,0 +1,85 @@
+using System.Collections.Generic;
+using Apache.NMS;
+
+namespace Lucene.Net.Facet
+{
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+ using AtomicReaderContext = Lucene.Net.Index.AtomicReaderContext;
+ using Collector = Lucene.Net.Search.Collector;
+ using ChildScorer = Lucene.Net.Search.Scorer.ChildScorer;
+ using Scorer = Lucene.Net.Search.Scorer;
+
+ /// <summary>
+ /// Verifies in collect() that all child subScorers are on
+ /// the collected doc.
+ /// </summary>
+ internal class AssertingSubDocsAtOnceCollector : Collector
+ {
+
+ // TODO: allow wrapping another Collector
+
+ internal IList<Scorer> allScorers;
+
+ public override Scorer Scorer
+ {
+ set
+ {
+ // Gathers all scorers, including value and "under":
+ allScorers = new List<Scorer>();
+ allScorers.Add(value);
+ int upto = 0;
+ while (upto < allScorers.Count)
+ {
+ value = allScorers[upto++];
+ foreach (ChildScorer sub in value.Children)
+ {
+ allScorers.Add(sub.Child);
+ }
+ }
+ }
+ }
+
+ public override void Collect(int docID)
+ {
+ foreach (Scorer s in allScorers)
+ {
+ if (docID != s.DocID())
+ {
+ throw new IllegalStateException("subScorer=" + s + " has docID=" + s.DocID() + " != collected docID=" + docID);
+ }
+ }
+ }
+
+ public override AtomicReaderContext NextReader
+ {
+ set
+ {
+ }
+ }
+
+ public override bool AcceptsDocsOutOfOrder()
+ {
+ return false;
+ }
+
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/982eaf60/src/Lucene.Net.Tests/core/Facet/FacetTestCase.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/core/Facet/FacetTestCase.cs b/src/Lucene.Net.Tests/core/Facet/FacetTestCase.cs
new file mode 100644
index 0000000..49d5f0f
--- /dev/null
+++ b/src/Lucene.Net.Tests/core/Facet/FacetTestCase.cs
@@ -0,0 +1,293 @@
+using System;
+using System.Diagnostics;
+using System.Collections.Generic;
+using System.Linq;
+using Lucene.Net.Facet;
+using Lucene.Net.Randomized.Generators;
+using Lucene.Net.Support;
+using NUnit.Framework;
+
+namespace Lucene.Net.Facet
+{
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+ using CachedOrdinalsReader = Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader;
+ using DocValuesOrdinalsReader = Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader;
+ using FastTaxonomyFacetCounts = Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts;
+ using OrdinalsReader = Lucene.Net.Facet.Taxonomy.OrdinalsReader;
+ using TaxonomyFacetCounts = Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts;
+ using TaxonomyReader = Lucene.Net.Facet.Taxonomy.TaxonomyReader;
+ using BytesRef = Lucene.Net.Util.BytesRef;
+ using SuppressCodecs = Lucene.Net.Util.LuceneTestCase.SuppressCodecs;
+ using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
+ using TestUtil = Lucene.Net.Util.TestUtil;
+
+ [TestFixture]
+ public abstract class FacetTestCase : LuceneTestCase
+ {
+ public virtual Facets GetTaxonomyFacetCounts(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector c)
+ {
+ return GetTaxonomyFacetCounts(taxoReader, config, c, FacetsConfig.DEFAULT_INDEX_FIELD_NAME);
+ }
+ public virtual Facets GetTaxonomyFacetCounts(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector c, string indexFieldName)
+ {
+ Facets facets;
+ if (Random().NextBoolean())
+ {
+ facets = new FastTaxonomyFacetCounts(indexFieldName, taxoReader, config, c);
+ }
+ else
+ {
+ OrdinalsReader ordsReader = new DocValuesOrdinalsReader(indexFieldName);
+ if (Random().NextBoolean())
+ {
+ ordsReader = new CachedOrdinalsReader(ordsReader);
+ }
+ facets = new TaxonomyFacetCounts(ordsReader, taxoReader, config, c);
+ }
+
+ return facets;
+ }
+
+ protected internal virtual string[] GetRandomTokens(int count)
+ {
+ string[] tokens = new string[count];
+ for (int i = 0; i < tokens.Length; i++)
+ {
+ tokens[i] = TestUtil.RandomRealisticUnicodeString(Random(), 1, 10);
+ //tokens[i] = TestUtil.RandomSimpleString(Random(), 1, 10);
+ }
+ return tokens;
+ }
+
+ protected internal virtual string PickToken(string[] tokens)
+ {
+ for (int i = 0; i < tokens.Length; i++)
+ {
+ if (Random().NextBoolean())
+ {
+ return tokens[i];
+ }
+ }
+
+ // Move long tail onto first token:
+ return tokens[0];
+ }
+
+ protected internal class TestDoc
+ {
+ public string content;
+ public string[] dims;
+ public float value;
+ }
+
+ protected internal virtual IList<TestDoc> GetRandomDocs(string[] tokens, int count, int numDims)
+ {
+ IList<TestDoc> docs = new List<TestDoc>();
+ for (int i = 0; i < count; i++)
+ {
+ TestDoc doc = new TestDoc();
+ docs.Add(doc);
+ doc.content = PickToken(tokens);
+ doc.dims = new string[numDims];
+ for (int j = 0; j < numDims; j++)
+ {
+ doc.dims[j] = PickToken(tokens);
+ if (Random().Next(10) < 3)
+ {
+ break;
+ }
+ }
+ if (VERBOSE)
+ {
+ Console.WriteLine(" doc " + i + ": content=" + doc.content);
+ for (int j = 0; j < numDims; j++)
+ {
+ if (doc.dims[j] != null)
+ {
+ Console.WriteLine(" dim[" + j + "]=" + doc.dims[j]);
+ }
+ }
+ }
+ }
+
+ return docs;
+ }
+
+ protected internal virtual void SortTies(IList<FacetResult> results)
+ {
+ foreach (FacetResult result in results)
+ {
+ SortTies(result.labelValues);
+ }
+ }
+
+ protected internal virtual void SortTies(LabelAndValue[] labelValues)
+ {
+ double lastValue = -1;
+ int numInRow = 0;
+ int i = 0;
+ while (i <= labelValues.Length)
+ {
+ if (i < labelValues.Length && (double)labelValues[i].value == lastValue)
+ {
+ numInRow++;
+ }
+ else
+ {
+ if (numInRow > 1)
+ {
+ Array.Sort(labelValues, i - numInRow, i, new ComparatorAnonymousInnerClassHelper(this));
+ }
+ numInRow = 1;
+ if (i < labelValues.Length)
+ {
+ lastValue = (double)labelValues[i].value;
+ }
+ }
+ i++;
+ }
+ }
+
+ private class ComparatorAnonymousInnerClassHelper : IComparer<LabelAndValue>
+ {
+ private readonly FacetTestCase outerInstance;
+
+ public ComparatorAnonymousInnerClassHelper(FacetTestCase outerInstance)
+ {
+ this.outerInstance = outerInstance;
+ }
+
+ public virtual int Compare(LabelAndValue a, LabelAndValue b)
+ {
+ Debug.Assert((double)a.value == (double)b.value);
+ return (new BytesRef(a.label)).CompareTo(new BytesRef(b.label));
+ }
+ }
+
+ protected internal virtual void SortLabelValues(IList<LabelAndValue> labelValues)
+ {
+ var resArray = labelValues.ToArray();
+ Array.Sort(resArray,new ComparatorAnonymousInnerClassHelper2(this));
+ labelValues = resArray.ToList();
+ }
+
+ private class ComparatorAnonymousInnerClassHelper2 : IComparer<LabelAndValue>
+ {
+ private readonly FacetTestCase outerInstance;
+
+ public ComparatorAnonymousInnerClassHelper2(FacetTestCase outerInstance)
+ {
+ this.outerInstance = outerInstance;
+ }
+
+ public virtual int Compare(LabelAndValue a, LabelAndValue b)
+ {
+ if ((double)a.value > (double)b.value)
+ {
+ return -1;
+ }
+ else if ((double)a.value < (double)b.value)
+ {
+ return 1;
+ }
+ else
+ {
+ return (new BytesRef(a.label)).CompareTo(new BytesRef(b.label));
+ }
+ }
+ }
+
+ protected internal virtual void SortFacetResults(IList<FacetResult> results)
+ {
+ var resArray = results.ToArray();
+ Array.Sort(resArray, new ComparatorAnonymousInnerClassHelper3(this));
+ results = resArray.ToList();
+ }
+
+ private class ComparatorAnonymousInnerClassHelper3 : IComparer<FacetResult>
+ {
+ private readonly FacetTestCase outerInstance;
+
+ public ComparatorAnonymousInnerClassHelper3(FacetTestCase outerInstance)
+ {
+ this.outerInstance = outerInstance;
+ }
+
+ public virtual int Compare(FacetResult a, FacetResult b)
+ {
+ if ((double)a.value > (double)b.value)
+ {
+ return -1;
+ }
+ else if ((double)b.value > (double)a.value)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
+ [Test]
+ protected internal virtual void AssertFloatValuesEquals(IList<FacetResult> a, IList<FacetResult> b)
+ {
+ Assert.AreEqual(a.Count, b.Count);
+ float lastValue = float.PositiveInfinity;
+ IDictionary<string, FacetResult> aByDim = new Dictionary<string, FacetResult>();
+ for (int i = 0; i < a.Count; i++)
+ {
+ Assert.True((float)a[i].value <= lastValue);
+ lastValue = (float)a[i].value;
+ aByDim[a[i].dim] = a[i];
+ }
+ lastValue = float.PositiveInfinity;
+ IDictionary<string, FacetResult> bByDim = new Dictionary<string, FacetResult>();
+ for (int i = 0; i < b.Count; i++)
+ {
+ bByDim[b[i].dim] = b[i];
+ Assert.True((float)b[i].value <= lastValue);
+ lastValue = (float)b[i].value;
+ }
+ foreach (string dim in aByDim.Keys)
+ {
+ AssertFloatValuesEquals(aByDim[dim], bByDim[dim]);
+ }
+ }
+
+ [Test]
+ protected internal virtual void AssertFloatValuesEquals(FacetResult a, FacetResult b)
+ {
+ Assert.AreEqual(a.dim, b.dim);
+ Assert.True(Arrays.Equals(a.path, b.path));
+ Assert.AreEqual(a.childCount, b.childCount);
+ Assert.AreEqual((float)a.value, (float)b.value, (float)a.value / 1e5);
+ Assert.AreEqual(a.labelValues.Length, b.labelValues.Length);
+ for (int i = 0; i < a.labelValues.Length; i++)
+ {
+ Assert.AreEqual(a.labelValues[i].label, b.labelValues[i].label);
+ Assert.AreEqual((float)a.labelValues[i].value, (float)b.labelValues[i].value, (float)a.labelValues[i].value / 1e5);
+ }
+ }
+ }
+
+}
\ No newline at end of file