浏览 3022 次
锁定老帖子 主题:lucene问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-22
public Hits search(String queryString) { Hits hits = null; try { File file = new File(indexPath); Directory directory = FSDirectory.getDirectory(file); IndexSearcher searcher = new IndexSearcher(directory); String[] fields = { "CUSTOMERID", "SHIPNAME", "SHIPCITY", "SHIPCOUNTRY" }; MultiFieldQueryParser mQueryPaser = new MultiFieldQueryParser( fields, getAnalyzer()); Query query = mQueryPaser.parse(queryString); hits = searcher.search(query); } catch (Exception e) { //do something here } return hits; } public void doIndex(String sql) { try { IndexWriter writer = new IndexWriter(indexPath, getAnalyzer(), true); ResultSet rs = luceneDB.getResult(sql); while (rs.next()) { Document doc = new Document(); doc.add(new Field("CUSTOMERID", rs.getString("CUSTOMERID"), Field.Store.YES, Field.Index.TOKENIZED)); doc.add(new Field("SHIPNAME", rs.getString("SHIPNAME"), Field.Store.YES, Field.Index.TOKENIZED)); doc.add(new Field("SHIPCITY", rs.getString("SHIPCITY"), Field.Store.YES, Field.Index.TOKENIZED)); doc.add(new Field("SHIPCOUNTRY", rs.getString("SHIPCOUNTRY"), Field.Store.YES, Field.Index.TOKENIZED)); writer.addDocument(doc); } writer.optimize(); writer.close(); } catch (CorruptIndexException ce) { System.out.println(ce.getMessage()); } catch (IOException ie) { System.out.println(ie.getMessage()); } catch (SQLException se) { System.out.println(se.getMessage()); } } public Analyzer getAnalyzer() { return new StandardAnalyzer(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-28
哈哈,估计你的索引字段名都是大写的,但是查询的时候用查询词是要进过StandardAnalyzer的,这样QueryPaser出来的Query字段全都成了小写的,当然什么都查不出来。你可以在
Query query = mQueryPaser.parse(queryString); 后面把query打印出来看看 |
|
返回顶楼 | |
发表时间:2007-08-30
field都改成小写也还是不行,我用的是lucene2.2的,很郁闷
|
|
返回顶楼 | |
发表时间:2007-08-31
介绍你个老外弄的Luke,可以查看你索引文件里的内容。另外你的 MultiFieldQueryParser mQueryPaser = new MultiFieldQueryParser(
fields, getAnalyzer()); Query query = mQueryPaser.parse(queryString);//这个parse是继承QueryParser的吧,你的queryString是怎么传的呢(是不是field:value)?有可能是这里的问题。 |
|
返回顶楼 | |
发表时间:2007-08-31
我认为这里应该不是分析器Analyzer的缘故,因为indexWriter与IndexSearcher用的是同一种Analyzer,怀疑还是你的queryString的问题,你可以试试
public static Query parse(String[] queries, String[] fields,Analyzer analyzer) throws ParseException |
|
返回顶楼 | |