[
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]