我正在使用Lucene API,我在这行代码中收到以下错误:
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable;
...
Document _document = new Document();
_document.add(new Field("type", document.getType()));
错误: CollectionIndexer.java:34:找不到符号 symbol:方法add(org.apache.lucene.document.Field) location:类CollectionIndexer.Document _document.add(new Field(“type”,document.getType()));
感谢
更新:javac -cp commons-digester-2.1 / commons-digester-2.1.jar:lucene-core-3.0.3.jar myApp.java
答案 0 :(得分:3)
当我对这种类型的错误感到难过时,通常是因为我有InterfaceName
的两个定义,并且意外地在一个或多个地方导入了错误的定义。
(例如,当我自动导入缺失的类时,我意外选择了java.awt.List
而不是java.util.List
。)
确保......
symbol : method methodName(org.bla.blabla.myClass)
\____________________/
... this part ...
...匹配预期的包/类。
答案 1 :(得分:1)
问题来自于document.getType()
方法返回字符串的事实
在Field
类中没有与您的调用匹配的构造函数。
请参阅http://lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/document/Field.html。
如果我在我的环境中测试你的代码,Eclipse会说:
构造函数Field(String,String)未定义
也许你可以这样做:
Document _document = new Document();
_document.add(new Field("type", document.getType().getBytes(), Store.YES);
// Or document.add(new Field("type", document.getType().getBytes(), Store.NO);
源代码提交后更新--------------------
问题来自于你的班级中有一个名为Document的内部类。 Document类和Lucene之间存在名称冲突。当您使用行Document _document = new Document();
实例化文档时,您实际上正在实现您的文档类。这就是编译器无法找到add
方法的原因。
多种解决方案:
一个。将文档前缀为Lucene包名称
org.apache.lucene.document.Document _document = new org.apache.lucene.document.Document();
湾重命名您的内部类,以便您没有任何名称冲突。
答案 2 :(得分:0)
根据问题更新进行了更新:
commons-digester-2.1
的情况下进行编译,以消除可能的冲突。