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

George Aroush closed LUCENENET-80.
----------------------------------

    Resolution: Duplicate

This is a duplicate of LUCENENET-32 and was fixed for Apache Lucene.Net.2.0 
build 004 "final".

> 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
>            Assignee: George Aroush
>
> 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.

Reply via email to