`

lucene3.6笔记添加搜索功能

 
阅读更多
lucene为程序添加搜索功能,此功能基于已创建好的文档的索引之上。这里我已经为一些文档建立了索引,并保存到硬盘上。下面开始针对这些索引,添加搜索功能。


1、简单的TermQuery搜索

Java代码

    /** 
         * 【TermQuery方式搜索】 
         *  
         * 对特定的项进行查询,如filename等于XPP3-LICENSE.txt的文件 
         * @throws Exception 
         */  
        public void testTerm() throws Exception {  
            Directory dir=FSDirectory.open(new File("d:/index/book_index/"));  
            IndexSearcher searcher=new IndexSearcher(dir);  
              
            Term t=new Term("content","params");  
            Query query=new TermQuery(t);  
            TopDocs docs=searcher.search(query, 10);  
            System.out.println(docs.totalHits+"--------");  
      
              
            t=new Term("filename","version");  
            docs=searcher.search(new TermQuery(t), 10);  
            System.out.println(docs.totalHits);  
            searcher.close();  
            dir.close();  
        }  

2、使用QueryParser转化用户复杂输入,进行与或非查询操作。

Java代码

    /** 
     * 【QueryParser查询】 
     *  
     *  
     * 模糊查询,与,或,非方式 
     * @throws Exception 
     */  
    public void testQueryParse() throws Exception{  
        Directory dir=FSDirectory.open(new File("d:/index/book_index/"));  
        IndexSearcher search=new IndexSearcher(dir);  
          
        QueryParser parser=new QueryParser(Version.LUCENE_30,"content",new SimpleAnalyzer());  
        Query query=parser.parse("+ADVISED +POSSIBILITY -JAVA");  
        TopDocs docs=search.search(query, 10);  
    /       assertEquals(1, docs.totalHits);  
        Document document=search.doc(docs.scoreDocs[0].doc);  
        System.out.println("查询第一个的名称"+document.get("filename"));  
        System.out.println("与或非查询个数"+docs.totalHits);  
          
        query=parser.parse("Indiana OR University");  
        docs=search.search(query, 10);  
        System.out.println("Or查询个数"+docs.totalHits);  
      
        search.close();  
        dir.close();  
    }  


查询表达式

匹配文档

Java

默认域包含有Java项的文档

Java junit

Java OR junit

默认域包含有Java,junit中一个,或者两个的文档

+Java +junit

Java AND junit

默认域同时包含有Java和junit的文档

Title:ant

Title域中包含有ant的文档

Title:extreme -subject:sport

Title:extreme AND NOT subject:sport

Title域中包含extreme而且subject域中不包含sport

(agile OR extreme) AND methody

默认域包含有methody且包含agile或者extreme中的一个

Title:“junit in action”

Title域一定为junit in action的文档

Title:“junit action“ -5

Title域中junit和action的间隔小于5的文档

Java*

包含有Java开头的文档,如Javascript,Javaserver,Java等

Java~

包含与Java单词相近的文档,如Java

Lastdate:[1/1/09 TO 12/31/09]

Lastdate域在09年1月1号到09年12月31号的文档

3、近实时搜索

/** 
     * 【近实时搜索】 
     *  
     * @throws Exception 
     */  
    public void testNRTsearch() throws Exception{  
        Directory dir=new RAMDirectory();  
        IndexWriter writer=new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);  
        for (int i = 0; i < 10; i++) {  
            Document doc=new Document();  
            doc.add(new Field("id", ""+i, Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));  
            doc.add(new Field("text", "aaa", Field.Store.NO, Field.Index.ANALYZED ));  
            writer.addDocument(doc);  
        }  
          
        IndexReader reader=writer.getReader();  
        IndexSearcher searcher=new IndexSearcher(reader);  
          
        Query query=new TermQuery(new Term("text","aaa"));  
        TopDocs docs=searcher.search(query, 1);  
        System.out.println("[搜索的总数]"+docs.totalHits);  
          
          
        //先删除id为7的文档,然后添加一个id为22的文档,进行搜索,看是不是近实时的  
        writer.deleteDocuments(new Term("id","7"));  
        Document doc=new Document();  
        doc.add(new Field("id", "22", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));  
        doc.add(new Field("text","bbb",Field.Store.NO,Field.Index.ANALYZED));  
        writer.addDocument(doc);  
          
        //重启reader,然后搜索  
        IndexReader newReader=reader.reopen();  
        assertEquals(reader==newReader,false);  
        reader.close();  
        searcher=new IndexSearcher(newReader);  
          
          
        TopDocs hits=searcher.search(query, 10);  
        assertEquals(9, hits.totalHits);  
        query=new TermQuery(new Term("text","bbb"));  
        hits=searcher.search(query, 10);  
        System.out.println("bbb文档的个数:"+hits.totalHits);  
          
        //关闭资源  
        newReader.close();  
        writer.close();  
    }  

分享到:
评论

相关推荐

    Lucene 3.6 学习笔记

    以上就是Lucene 3.6的学习笔记,涵盖了从基础到高级的各种搜索和索引操作,以及相关的分词和扩展功能。通过学习这些内容,可以深入理解Lucene的工作机制,并利用其强大的搜索能力构建高效的应用。

    lucene3.6 搜索例子

    在本篇文章中,我们将深入探讨Lucene 3.6版本中的搜索功能,通过实例解析其核心概念和操作流程。 一、Lucene概述 Lucene的出现,使得开发人员能够轻松地在他们的应用中添加高级搜索功能。作为一个高性能的信息检索...

    lucene3.6.jar

    这里的“lucene3.6.jar”是一个包含了Lucene 3.6版本核心功能的Java类库,它是实现全文检索的基础。 Lucene的核心特性包括索引构建、查询解析、搜索执行以及结果排序等。索引构建允许开发者将大量文本数据转换为...

    lucene 3.6 全文检索

    总结来说,Lucene 3.6提供了一套完整的全文检索解决方案,从文本预处理、索引构建到查询执行,再到结果展示,涵盖了搜索引擎的各个环节。熟练掌握Lucene,能够帮助你构建自己的高效搜索系统,满足各种数据检索需求。...

    IKAnalyzer修复源码,Lucene3.6 Jar及使用示例

    版本3.6是其历史上的一个稳定版本,提供了强大的索引和搜索功能,广泛应用于各种搜索引擎和信息检索系统。IKAnalyzer与Lucene结合使用,能够提升中文文本的搜索性能和精度。 IKAnalyzer的修复源码主要关注的是用户...

    lucene3.6 模仿百度自动补全

    lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全

    lucene 3.6

    在 Lucene 3.6 版本中,它提供了强大的文本搜索功能,适用于Java开发人员。这个版本相对稳定,对于初学者来说是一个很好的学习起点。 首先,我们来了解一下 Lucene 的核心概念: 1. **索引(Index)**:Lucene 的...

    lucene3.6实例(索引和查询)

    在网上找了实例,但是发现不能使用,只能简历索引。...lucene3.6版本,能够建立索引,能搜索。inderwriter,indexsearch. 其中包C下的helloword实例能用,其余的全是网上不能用的。直接下载 可以运行

    基于lucene3.6平台搜索工具相关包及使用说明

    在3.6版本中,Lucene提供了一套完整的搜索解决方案,包括索引构建、查询解析、结果排序等功能。本指南将深入探讨基于Lucene 3.6的搜索工具包及其使用方法。 一、Lucene 3.6核心组件 1. 分析器(Analyzer):负责对...

    lucene3.6工程原文件

    总结,Lucene 3.6 是一个强大的全文检索工具,通过理解它的基本概念、主要组件以及不同类型的查询,开发者可以快速构建起自己的全文搜索引擎。对于初学者而言,这个版本提供了足够的学习资源和实践机会,是深入理解...

    lucene3.6的入门案例

    在这个入门案例中,我们将深入理解如何使用 Lucene 3.6 版本来构建基本的文本搜索引擎。 首先,我们需要了解 Lucene 的核心概念: 1. **索引(Indexing)**:Lucene 的工作始于创建索引,将文档内容转化为可搜索的...

    lucene3.6 的源代码

    在版本3.6中,Lucene提供了一整套强大的文本搜索功能,包括索引、查询、排序、分词等。这个版本的源代码为我们提供了深入了解搜索引擎工作原理的机会。 首先,我们要明确的是,Lucene的核心在于它的索引机制。在`...

    基于Lucene3.6进行全文检索的小案例

    Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了强大的文本搜索功能,使得在各种应用中实现复杂而高效的搜索引擎成为可能。在这个小案例中,我们将了解Lucene的基本概念,以及如何构建一个简单的全文...

    lucene3.6+IKAnalyzer2012FF_u1

    在信息技术领域,搜索引擎是数据检索的核心工具,而Lucene作为Apache软件基金会的开源全文搜索引擎库,因其强大的搜索功能和灵活性,被广泛应用于各种项目中。本次我们关注的是Lucene 3.6版本,它在前一版本的基础上...

    lucene 3.6 索引格式总结

    本文档详细介绍了lucene3.6中的索引,以及每个部分对应于硬盘下的文件夹里的哪个文件。这个根据本人多年学术及编程经验总结的

    lucene 3.6 检索文件 pdf word ppt excel txt html xml

    除了基本的检索功能,Lucene还提供了高级搜索特性,如布尔查询、短语查询、模糊查询和近似查询等。用户可以通过构造复杂的查询条件,精确地找到所需的信息。同时,Lucene还支持权重计算,可以根据词频、位置等多种...

    lucene3.6入门实例教程

    Lucene是一个高性能、全文检索库,广泛用于构建搜索功能强大的应用程序。这份教程通过完整的代码示例,为学习者提供了实践操作的机会,从而深入理解Lucene的核心机制。 首先,了解Lucene的基本架构至关重要。Lucene...

    第一个Lucene 3.6 (3.X) 入门实例

    【标题】:“第一个Lucene 3.6 (3.X) 入门实例” ...总之,Lucene 3.6入门实例涉及从设置开发环境、创建索引到实现搜索功能的全过程。理解这些基本步骤和核心概念,是掌握Lucene并进一步构建高效检索系统的基石。

    lucene3.6源码

    《深入剖析Lucene 3.6源码》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护,被广泛应用于各种搜索引擎的构建。Lucene 3.6.1是其历史版本之一,虽然现在有更新的版本,但3.6.1版本因其稳定性及...

    lucene-3.6.1

    4. 搜索引擎API:Lucene提供了一套丰富的API,开发者可以通过这些API实现索引构建、查询执行、结果排序等功能。3.6.1版本的API更加稳定,易于使用。 三、3.6.1版本特性 1. 近实时搜索:Lucene 3.6.1引入了NRT(Near...

Global site tag (gtag.js) - Google Analytics