lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Digy (JIRA)" <j...@apache.org>
Subject [jira] Commented: (LUCENENET-80) MultiSearcher with BooleanQuery
Date Fri, 17 Aug 2007 14:18:30 GMT

    [ https://issues.apache.org/jira/browse/LUCENENET-80?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12520568
] 

Digy commented on LUCENENET-80:
-------------------------------

Hi Michael,

Current version does not contain that bug. It is fixed.

DIGY

> MultiSearcher with BooleanQuery 
> --------------------------------
>
>                 Key: LUCENENET-80
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-80
>             Project: Lucene.Net
>          Issue Type: Bug
>         Environment: Windows Server 2003, Lucene.Net 2.0
>            Reporter: Michael Garski
>
> When using a MultiSearcher with a HitCollector and a BooleanQuery with two identical
terms an ArgumentException is thrown.  This does not happen when using Hits.  Sample code
to reproduce:
> 		public void TestBoolean(string index)
> 		{
> 			IndexSearcher searcher = new IndexSearcher(index);
> 			SimpleCollector sc = new SimpleCollector();
> 			QueryParser qp = new QueryParser("Body", new StandardAnalyzer());
> 			searcher.Search(qp.Parse("test AND test"), null, sc);
> 			sc.Hits = 0;
> 			MultiSearcher ms = new MultiSearcher(new Searchable[] { searcher });
> 			ms.Search(qp.Parse("test AND test"), null, sc);
> 		}
> 	public class SimpleCollector : HitCollector
> 	{
> 		public int Hits = 0;
> 		public override void Collect(int doc, float score)
> 		{
> 			Hits++;
> 		}
> 	}
> The stack trace on the exception is:
> System.ArgumentException: Item has already been added. Key in dictionary: 'Body:test'
 Key being added: 'Body:test'
>    at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
>    at System.Collections.Hashtable.Add(Object key, Object value)
>    at Lucene.Net.Search.TermQuery.ExtractTerms(Hashtable terms)
>    at Lucene.Net.Search.BooleanQuery.ExtractTerms(Hashtable terms)
>    at Lucene.Net.Search.BooleanQuery.ExtractTerms(Hashtable terms)
>    at Lucene.Net.Search.MultiSearcher.CreateWeight(Query original)
> The issue is within TermQuery.ExtractTerms(Hashtable terms), where the term is added
to the Hashtable when the key already exists.  The Java version uses a Set, which allows a
key to be added twice to the collection. 
> A change in TermQuery from:
> 		public override void  ExtractTerms(System.Collections.Hashtable terms)
> 		{
>             Term term = GetTerm();
> 			terms.Add(term, term);
> 		}
> to:
> 		public override void  ExtractTerms(System.Collections.Hashtable terms)
> 		{
>             Term term = GetTerm();
> 			terms[term] = term;
> 		}
> Will correct this issue.  You could check the Hastable using ContainsKey, but this case
should be rare and overwriting the previous term in the collection would probably be better.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message