初次学lucene,遇到下面错误 请我是什么问题?搜索代码:/**
* 搜索
* @param type 搜索的类型 content or path or filename
* @param content 搜索的条件
* @param size 搜索数据的条数
*/
public void sercher(){
try {
//1、创建 Directory
Directory directory = FSDirectory.open(new File("D:/lucene/index01")); //创建在硬盘中
//2、创建 IndexReader 读取所有索引
IndexReader reader=IndexReader.open(directory);
//3、根据IndexReader 创建IndexSearcher
IndexSearcher searcher=new IndexSearcher(reader);
//4、创建parser来确定 搜索文件的内容 第二个参数表示搜索的域
QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 查询内容中包含参数 content的文档
Query query=parser.Query("java");
//5、根据 searcher搜索并返回TopDocs
TopDocs tds=searcher.search(query, 10); // 取10条数据
//6、根据TopDocs获取ScoreDoc对象
ScoreDoc[] sds=tds.scoreDocs; //所有文档所存的id号
for (ScoreDoc sd : sds) {
//7、根据searcher和 ScoreDoc获取具体的Document对象
Document d=searcher.doc(sd.doc);
//8、根据Document 对象 获取需要的值
System.out.println(d.get("filename")+"["+d.get("path")+"]");
}
//9、关闭reader
reader.close();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, column 0.
Was expecting one of:
<NOT> ...
"+" ...
"-" ...
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
"[" ...
"{" ...
<NUMBER> ...
<TERM> ...
"*" ...
at org.apache.lucene.queryParser.QueryParser.generateParseException(QueryParser.java:1818)
at org.apache.lucene.queryParser.QueryParser.jj_consume_token(QueryParser.java:1700)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1327)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1237)
at org.itat.test.HelloLucene.sercher(HelloLucene.java:99)
at org.itat.test.TestLucene.testSearcher2(TestLucene.java:26)
at org.itat.test.TestLucene.main(TestLucene.java:36)
lucenejava
解决方案 »
- hibernate中,GROUP BY 之后使用方法。请高人帮忙。谢谢!!!解答之后立即结贴!
- java解压rar|An unexpected error has been detected by Java Runtime Environment:
- 有开发企业级或大型网站的高手请进:请教 XML序列化(XML serialization) 和 RMI 问题
- servlet问题
- Spring+Hibernate查SQL server 2005
- [求助]请问能不能用java.util.Vector类做为主键类????
- 达人赐教啊.......
- 为什么sqlserver2000的表就是读不出来(hibernate插件)
- 有谁看过“Struts在行动”这本书?
- 急的头大-jboss的配置
- 我们爱分享————J2EE常见面试题分享(夕水溪下版)
- 跪求解答!!
QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));这不是么?
哦哦,我弄错了,是要parser 方法,谢谢你哦
代码没报错了,索引也创建成功了。但为什么没查出数据呢? D:/lucene/example 有A,B,C三个txt文档 A和B内容中包含java。奇怪....以下是我创建索引的方法:/**
* 建立索引
*/
public void index(){
IndexWriter writer=null;
try {
// 1、创建Directory; 创建索引库
//Directory directory=new RAMDirectory(); // 创建在内存中
Directory directory=FSDirectory.open(new File("D:/lucene/index01")); //创建在硬盘中
// 2、创建IndexWriter 写索引 ; StandardAnalyzer 分词器
IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
writer=new IndexWriter(directory,iwc);
// 3、创建Document 对象
Document doc=null;
// 4、为Document添加field
File f=new File("D:/lucene/example");
// 遍历文档中的文件
for (File file : f.listFiles()) {
doc=new Document();
// 获得文件内容; new FileReader(file):读取一个文件
doc.add(new Field("content", new FileReader(file)));
/* Field.Store.YES 是否把文件全名存在硬盘中 ; Field.Index.NOT_ANALYZED) 是否进行分词
* 获得文件名 (对于文件名没必要进行分词,它本身就是一个完整的词)
*/
doc.add(new Field("filename", file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
//获得文件路径
doc.add(new Field("path", file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
// 5、通过IndexWriter添加文档到索引
writer.addDocument(doc);
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (writer !=null)
try {
// 关闭IndexWriter
writer.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}