[lucene] lucene的过程中遇到一个问题
caojianxiang
2009-05-14
我在学习lucene的过程中遇到一个问题,如下程序:
public class Chinese { private static String FIELD_NAME = "content"; private static String QUERY = "共和国"; public static void main(String[] args) throws Exception { if (args.length != 0) { QUERY = args[0]; } Analyzer analyzer = new StandardAnalyzer(); String content = "中华人民共和国(英文:The People's Republic of China,通常简称为中国...];中华人民共和国将行政區劃分为23个省、5个少数民族自治区、4个直辖市、以及2个特别行政区,但台湾不在中华人民共和国政府实际控制范围内(参见:台湾问题)。中华人民共和国是世界上人口最多的国家,人口总数...,其余55个民族被统称为少数民族。中华人民共和国境内的通用语言是汉语普通话,使用的文字是规范汉字(此即汉语簡化字),少数民族如壮族、维吾尔族、蒙古族、藏族、朝鲜族等拥有自己的文字。《中华人民共和国宪法"; //接下来是标准的Lucene建立索引和检索的代码 Directory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new StandardAnalyzer()); Document doc = new Document(); Field fd = new Field(FIELD_NAME, content, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS); doc.add(fd); writer.addDocument(doc); writer.optimize(); writer.close(); IndexReader reader = IndexReader.open(ramDir); String queryString = QUERY; QueryParser parser = new QueryParser(FIELD_NAME, new StandardAnalyzer()); Query query = parser.parse(queryString); Searcher searcher = new IndexSearcher(ramDir); System.out.println("Searching for: " + query.toString()); Hits hits = searcher.search(query); } 当检索"共和国"时能够出来结果,但是检索"共和国123"时却无法得到结果,这是为什么呢? 是不是lucene并不支持真正的查询串解析,虽然提供了StandardAnalyzer(如QueryParser parser = new QueryParser(FIELD_NAME, new StandardAnalyzer()); )? 我真的很困惑,请求您能给我些指导。 |
|
luckaway
2009-05-18
本来就是这样的!
|
|
ppsddt
2009-05-18
Query query = parser.parse(queryString);
Searcher searcher = new IndexSearcher(ramDir); System.out.println("Searching for: " + query.toString()); Hits hits = searcher.search(query); 上面的是你的代码: Query query = parser.parse(queryString); //通过对你输入的关键词分词后在来索引 String s = query.toString(); //这个10要根据你自己的query.toString()返回的值来确定 String srt = s.subString(10,s.length()-1); query = parser.parse(srt); Searcher searcher = new IndexSearcher(ramDir); System.out.println("Searching for: " + query.toString()); Hits hits = searcher.search(query); |