请您先登录,才能继续操作
[lucene] 使用IndexSearcher做检索时,TermDocs一直为空是怎么回事?
lyj552041
2010-09-02
刚开始研究Lucene,参照资料做了个入门实例,运行一下没有报错,可是就是没有检索的相关数据,后来调试了一下,发现TermDocs一直为空。
下面我把代码贴出来,大家帮我看下,用的是3.0的库 1.IndexProcess.java public class IndexProcess { private String INDEX_STORE_PATH="D:\\index"; public void createIndex(String inputDir){ try { File file = new File(INDEX_STORE_PATH); Directory dir = FSDirectory.open(file); IndexWriter writer= new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_CURRENT),true,IndexWriter.MaxFieldLength.LIMITED); File fileDir = new File(inputDir); File[] files = fileDir.listFiles(); int length = files.length; for(int i=0;i<length;i++){ String fileName = files[i].getName(); if(fileName.substring(fileName.lastIndexOf(".")).equals(".txt")){ Document doc = new Document(); Field field = new Field("filename",files[i].getName(),Field.Store.YES,Field.Index.ANALYZED); doc.add(field); field = new Field("content",loadFileToString(files[i]),Field.Store.NO,Field.Index.ANALYZED); doc.add(field); writer.addDocument(doc); } } writer.close(); } catch (Exception e) { e.printStackTrace(); } } public String loadFileToString(File file){ try { BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuffer conts = new StringBuffer(); String line = reader.readLine(); while(line !=null){ conts.append(line); line = reader.readLine(); } reader.close(); return conts.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } } 2.SearchProcess.java public class SearchProcess { private String INDEX_STORE_PATH ="D:\\index"; public void indexSearch(String searchType,String searchKey){ try { System.out.println("使用索引方式搜索"); System.out.println("-------------------------------------------------------------------------------------"); File file = new File(INDEX_STORE_PATH); Directory dir = FSDirectory.open(file); IndexSearcher searcher = new IndexSearcher(dir); Term t = new Term(searchType,searchKey); Query q = new TermQuery(t); Date beginTime = new Date(); //下面这个TermDocs一直为空,所以下面的循环也不会走。 TermDocs termDocs = searcher.getIndexReader().termDocs(t); //System.out.println(termDocs.freq()); while(termDocs.next()){ System.out.println("测试"); System.out.print("find "+termDocs.freq()+" matches in"); System.out.println(searcher.getIndexReader().document(termDocs.doc()).getField("filename").stringValue()); } // Date endTime = new Date(); long timeOfSearch = endTime.getTime() - beginTime.getTime(); System.out.println("使用索引方式搜索总耗时 "+timeOfSearch+"ms"); } catch (Exception e) { e.printStackTrace(); } } } 程序运行后: 索引文件: _e.cfs segments.gen segments_g 三个。 |
|
viruscamp
2010-09-03
用 luke 打开你索引库看看里面的内容吧
|
|
lyj552041
2010-09-03
我换了个searchKey就行。是不是有的中文不能匹配啊。还是分词问题?
|
|
galo
2010-09-07
![]() |