Lucene3.1对QueryParser做了调整

Lucene3.1对QueryParser做了调整,搜索语法树发生了变化。示例效果如下:


示例代码:


	public static final String word = "国务院办公厅关于印发2011年食品安全重点工作安排的通知";


   /** 
     * 建索引<br> 
     *  
     * @throws CorruptIndexException 
     * @throws LockObtainFailedException 
     * @throws IOException 
     */  
    private static void build() throws CorruptIndexException, LockObtainFailedException, IOException {  
        String path = "index";  
        IndexWriter writer = new IndexWriter(FSDirectory.open(new File(path)), new SmartChineseAnalyzer(Version.LUCENE_35), true, MaxFieldLength.LIMITED);  
        Document document = new Document();  
        document.add(new Field("text", word, Store.YES, Index.ANALYZED));  
        writer.addDocument(document);  
        writer.optimize();  
        writer.close();  
    }  


    
    /** 
     * 搜索 
     *  
     * @param keyword 
     * @throws CorruptIndexException 
     * @throws IOException 
     * @throws ParseException 
     * @throws InvalidTokenOffsetsException 
     */  
    private static void search() throws CorruptIndexException, IOException, ParseException {  
        String keyword = "国务院食品安全";
        Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_35);  
        QueryParser parser = new QueryParser(Version.LUCENE_31, "text", analyzer);  
        Query query = parser.parse(keyword);  
        IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("index")));  
        System.out.println(query);  
        TopDocs topDocs = searcher.search(query, 10);  
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;  
        System.out.println("hits:" + topDocs.totalHits);  
        for (ScoreDoc scoreDoc : scoreDocs) {  
            Document doc = searcher.doc(scoreDoc.doc);  
            String text = doc.get("text");  
            System.out.println(text);  
        }  
    }  






注意其中QueryParser parser = new QueryParser(Version.LUCENE_31, "text", analyzer)的部分,采用Version.LUCENE_31和Version.LUCENE_30(及以前)的搜索结果是不一样的,结果如下:


采用30版本的结果:
text:"国务院 食品 安全"
hits:0
采用31版本的结果:
text:国务院 text:食品 text:安全
hits:1


可以发现,在LUCENE3.0之前的版本中,用"国务院食品安全"做搜索词搜索"国务院办公厅关于印发2011年食品安全重点工作安排的通知"这段话是搜不到的,而用"国务院 食品安全"(中间有一个空格)就可以。3.1之后的版本,两个搜索词就等价了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值