[ 
https://issues.apache.org/jira/browse/LUCENE-5367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13856533#comment-13856533
 ] 

Shai Erera commented on LUCENE-5367:
------------------------------------

Thanks Lucien, this helps clarify the issue. The thing is, FacetFields adds a 
TokenStream as a Field to the document, and in general you shouldn't expect to 
be able to add the same document multiple times, if it contains a Field that 
was added with a TokenStream. However, in terms of the facet APIs, this is all 
hidden to the user, and so the user has no way to know this is supported/not.

I can fix DrillDownStream to save the Iterable it receives instead of the the 
Iterator, and in reset() call iterable.iterator(). This should allow you to add 
the same document multiple times. However, on LUCENE-5339 we're pretty much 
rewriting the entire facet APIs, and it looks like this issue is gone there, as 
DrillDownStream is gone (instead, every level in the hierarchy is added as a 
StringField). I believe LUCENE-5339 will make it into the next release (4.7), 
so let's do two things:

# Can you try this test over the LUCENE-5339 branch?
# I'll link this issue to LUCENE-5339, and mark as a blocker for 4.7. If 
LUCENE-5339 is committed before 4.7, I'll close this issue, otherwise fix 
DrillDownStream.

> NoSuchElementException occurs when org.apache.lucene.facet.index.FacetFields 
> is used.
> -------------------------------------------------------------------------------------
>
>                 Key: LUCENE-5367
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5367
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: modules/facet
>    Affects Versions: 4.2.1, 4.6
>            Reporter: Lucien Pereira
>
> Hi,
> When I use the API as below :
> {code}
> List<CategoryPath> categories = Collections.<CategoryPath>singletonList(new 
> CategoryPath(path.toArray(new String[path.size()])));
> FacetFields facetFields = new FacetFields(taxonomyWriter);
> facetFields.addFields(document, categories);
> taxonomyWriter.commit();
> {code}
> An exception occurs :
> {quote}
> java.util.NoSuchElementException
>       at java.util.Collections$1.next(Collections.java:3302)
>       at 
> org.apache.lucene.facet.index.DrillDownStream.reset(DrillDownStream.java:78)
>       at 
> org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:97)
>       at 
> org.apache.lucene.index.DocFieldProcessor.processDocument(DocFieldProcessor.java:248)
>       at 
> org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:253)
>       at 
> org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:453)
>       at 
> org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1520)
>       at 
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1190)
>       at 
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1171)
> {quote}
> Seems likes this is due to multiple calls to 
> org.apache.lucene.facet.index.DrillDownStream#reset which invoques #next() on 
> an 'used' iterator.
> Regards,
> Lucien 



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to