[
https://issues.apache.org/jira/browse/LUCENE-3616?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13428594#comment-13428594
]
Chris Male commented on LUCENE-3616:
------------------------------------
bq. In my opinion if i have a ShortDocValuesField, it shouldnt have a setReader
method
Agreed. The setABC() methods are extremely confusing and add another level of
validation (using your example, we have to validate that you're not setting a
Reader on a NumericField).
Perhaps we can re-arrange this a little. If we genuinely feel there there are
use cases out there that we haven't covered with the typed impls and that we
don't want to cover, then why not make a GenericField or something, which is
abstract and accepts just name, FieldType and maybe an Object value. We can
then emphasis in documentation that it is expert only, should only be
subclassed in the extremely rare situations that our typed impls are
insufficient, and won't be validated so buyer-beware kind of thing.
We can then gut Field down to a very simple abstract class / interface, and
promote our typed impls to being 1st class and the recommended entry points for
users.
Of course if we feel we have provided adequate support through the typed impls,
then we can skip straight to the gutting.
> Illegal Field Configurations should throw exceptions
> ----------------------------------------------------
>
> Key: LUCENE-3616
> URL: https://issues.apache.org/jira/browse/LUCENE-3616
> Project: Lucene - Core
> Issue Type: Bug
> Affects Versions: 4.0-ALPHA
> Reporter: Grant Ingersoll
> Assignee: Michael McCandless
> Priority: Minor
> Attachments: LUCENE-3616.patch
>
>
> When working on LUCENE-3615, I came across:
> {quote}
> java.lang.IllegalArgumentException: field field is stored but does not have
> binaryValue, stringValue nor numericValue
> at
> org.apache.lucene.index.codecs.DefaultStoredFieldsWriter.writeField(DefaultStoredFieldsWriter.java:177)
> at
> org.apache.lucene.index.StoredFieldsConsumer.finishDocument(StoredFieldsConsumer.java:119)
> at
> org.apache.lucene.index.DocFieldProcessor.finishDocument(DocFieldProcessor.java:295)
> at
> org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:255)
> at
> org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:380)
> at
> org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1480)
> at
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1242)
> at
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1223)
> at org.apache.lucene.index.Test2BTerms.test2BTerms(Test2BTerms.java:194)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
> at
> org.apache.lucene.util.LuceneTestCase$3$1.evaluate(LuceneTestCase.java:525)
> at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> at
> org.apache.lucene.util.LuceneTestCaseRunner.runChild(LuceneTestCaseRunner.java:168)
> at
> org.apache.lucene.util.LuceneTestCaseRunner.runChild(LuceneTestCaseRunner.java:47)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
> at
> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71)
> at
> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199)
> at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> {quote}
> which is due to the using Textfield.TYPE_STORED when using a TokenStream.
> Since this is an illegal combination, we should throw an exception upon
> construction of the Field, not later when actually trying to do the indexing.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]