[
https://issues.apache.org/jira/browse/LUCENE-1825?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Schindler reassigned LUCENE-1825:
-------------------------------------
Assignee: Uwe Schindler
In principle you should always use addAttribute() when consuming a TokenStream,
if the attribute is unknown, it will be created empty - no problem.
MostLucene-internal code uses it in that way. getAttribute() is currently only
used for very special cases (e.g. in tests, to check if an attribute was really
added). But there seems to be one relict of getAttribute in the code. To fix
this bug, I should replace the getAttribute() call in the indexer by
addAttribute(). I will provide a patch for that.
If you have an unknown TokenStream instance you will never know, which of the
attributes are really used. If you want to optimize this, you could check
before, if the attribute is really used and e.g. exclude some code paths with
very complicated calculations based on these missing attributes.
I will also add an JavaDoc comment for this. The "more helpful" error message
is in my opinion not needed, because you cannot find out which of the
filter/stream in the chain is missing the attribute, because all in the chain
use the same Attribute instances.
> AttributeSource.getAttribute() should throw better IllegalArgumentException
> ---------------------------------------------------------------------------
>
> Key: LUCENE-1825
> URL: https://issues.apache.org/jira/browse/LUCENE-1825
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Analysis
> Affects Versions: 2.9
> Reporter: Tim Smith
> Assignee: Uwe Schindler
> Priority: Minor
> Fix For: 2.9
>
>
> when seting "use only new API" for TokenStream, i received the following
> exception:
> {code}
> [junit] Caused by: java.lang.IllegalArgumentException: This
> AttributeSource does not have the attribute 'interface
> org.apache.lucene.analysis.tokenattributes.TermAttribute'.
> [junit] at
> org.apache.lucene.util.AttributeSource.getAttribute(AttributeSource.java:249)
> [junit] at
> org.apache.lucene.index.TermsHashPerField.start(TermsHashPerField.java:252)
> [junit] at
> org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:145)
> [junit] at
> org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:244)
> [junit] at
> org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:772)
> [junit] at
> org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:755)
> [junit] at
> org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:2613)
> {code}
> However, i can't actually see the culprit that caused this exception
> suggest that the IllegalArgumentException include "getClass().getName()" in
> order to be able to identify which TokenStream implementation actually caused
> this
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]