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/30 19:53:14 UTC
[Lucene.Net] svn commit: r1129276 - in
/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch:
Extensions.cs SimpleFacetedSearch.cs
Author: digy
Date: Mon May 30 17:53:13 2011
New Revision: 1129276
URL: http://svn.apache.org/viewvc?rev=1129276&view=rev
Log:
[LUCENENET-415]
Modified:
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/Extensions.cs
incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/SimpleFacetedSearch.cs
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/Extensions.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/Extensions.cs?rev=1129276&r1=1129275&r2=1129276&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/Extensions.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/Extensions.cs Mon May 30 17:53:13 2011
@@ -41,6 +41,7 @@ namespace Lucene.Net.Search
}
//CartesianProduct - LINQ
+ //http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx
static IEnumerable<IEnumerable<T>> CartesianProduct2<T>(this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
Modified: incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/SimpleFacetedSearch.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/SimpleFacetedSearch.cs?rev=1129276&r1=1129275&r2=1129276&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/SimpleFacetedSearch.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net_2_9_4g/src/contrib/SimpleFacetedSearch/SimpleFacetedSearch.cs Mon May 30 17:53:13 2011
@@ -29,6 +29,7 @@ using Lucene.Net.QueryParsers;
using Lucene.Net.Store;
using Lucene.Net.Util;
using System.Threading;
+using System.Threading.Tasks;
/*
Suppose, we want a faceted search on fields f1 f2 f3,
@@ -120,37 +121,22 @@ namespace Lucene.Net.Search
//Now _Groups has 7 rows (as <List<string>, BitSet> pairs)
}
-
public Hits Search(Query query, int maxDocPerGroup = DefaultMaxDocPerGroup)
{
- Semaphore sync=null;
- if (_Groups.Count > 0) sync = new Semaphore(_Groups.Count, _Groups.Count);
-
List<HitsPerFacet> hitsPerGroup = new List<HitsPerFacet>();
DocIdSet queryDocidSet = new CachingWrapperFilter(new QueryWrapperFilter(query)).GetDocIdSet(_Reader);
-
+ Action[] actions = new Action[_Groups.Count];
for (int i = 0; i < _Groups.Count; i++)
{
HitsPerFacet h = new HitsPerFacet(new FacetName(_Groups[i].Key.ToArray()), _Reader, queryDocidSet, _Groups[i].Value, maxDocPerGroup);
hitsPerGroup.Add(h);
- sync.WaitOne();
- ThreadPool.QueueUserWorkItem(
- hpf =>
- {
- ((HitsPerFacet)hpf).Calculate();
- sync.Release();
- },
- h
- );
+ actions[i] = () => h.Calculate();
}
-
- for (int i = 0; i < _Groups.Count; i++)
- sync.WaitOne();
- if (_Groups.Count > 0) sync.Release(_Groups.Count);
-
+ Parallel.Invoke(actions);
+
Hits hits = new Hits();
hits.HitsPerFacet = hitsPerGroup.ToArray();