`
384444165
  • 浏览: 259355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(From原博客)Lucene实现以索引文件简单的搜索

阅读更多
承接上次的txt文本索引,Lucene操作很固定化,看看源码其实就是很好的学习过程,在这跟大家分享基本的搜索方法实现,之后对索引和搜索方法会写些复杂点的操作给大家,这个可以作为一个入门和兴趣培养啊,哪里不懂google搜索一下几分钟就能看懂:

package testLucene;

import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

public class Search {

    private IndexSearcher search=null;
    
    private Query query=null;
    
    //搜索关键字方法 返回Hits
    public final Hits SearchKeyword(String keyword){
        System.out.println("正在搜索关键字:"+keyword);
        try{
            query=QueryParser.parse(keyword, "contents", new StandardAnalyzer());
            
            Date start=new Date();
            Hits hits=search.search(query);
            Date end=new Date();
            System.out.println("检索用时:"+(end.getTime()-start.getTime())+"毫秒");
            return hits;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    
    //构造函数 初始化search
    public Search(){
        try{
            search=new IndexSearcher(IndexReader.open(Constants.Index_Store_Path));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    //输出Hits的结果
    public void printResult(Hits h){
        if(h.length()==0){
            System.out.println("对不起,没有找到搜索结果");
        }else{
            for(int i=0;i<h.length();i++){
                try{
                    Document doc=h.doc(i);
                    System.out.print("这是第"+i+"个搜索到的结果,文件名为:");
                    System.out.println(doc.get("path"));
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        System.out.println();
    }
    
    //main方法 使用上述方法,实现此次搜索
    public static void main(String[] args){
        Search sea=new Search();
        Hits h=null;
        //检索“叫做”
        h=sea.SearchKeyword("叫做");
        sea.printResult(h);
        //检索“文件”
        h=sea.SearchKeyword("文件");
        sea.printResult(h);
        //检索“新建”
        h=sea.SearchKeyword("新建");
        sea.printResult(h);
        //检索“我”
        h=sea.SearchKeyword("我");
        sea.printResult(h);
    }
}



其中上次四次文件的内容分别是:
a.txt:我新建的文件叫做a
b.txt:新建的文件叫做b
c.txt:文件叫做c
d.txt:叫做d

运行结果:
正在搜索关键字:叫做
检索用时:110毫秒
这是第0个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\d.txt
这是第1个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\c.txt
这是第2个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\a.txt
这是第3个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\b.txt

正在搜索关键字:文件
检索用时:15毫秒
这是第0个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\c.txt
这是第1个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\a.txt
这是第2个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\b.txt

正在搜索关键字:新建
检索用时:0毫秒
这是第0个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\a.txt
这是第1个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\b.txt

正在搜索关键字:我
检索用时:16毫秒
这是第0个搜索到的结果,文件名为:E:\E\Java\Lucene\testUse\test1\a.txt
分享到:
评论

相关推荐

    lucene全文搜索

    Lucene作为一种开源的全文检索解决方案,提供了强大的功能和支持,可以帮助开发者轻松实现高效的搜索服务。无论是站内搜索还是垂直搜索,Lucene都能提供出色的表现。通过本文档的学习,你可以深入了解全文检索的基本...

    Lucene搜索引擎2

    Lucene的索引由多个Segment组成,Segment是索引文件的基本单元,用于存储Document。Document代表要索引的“单元”,可以看作是数据库中的一条记录,它包含一组Field,每个Field相当于记录中的字段。Field有三个关键...

    indexer:使用 Apache Lucene 快速建立 CSV 文件索引

    用法索引和搜索 CSV 文件的内容。 输入文件中的第一列是每个索引文档的 ID 字段。 索引器从 [ input.csv ] 创建 [ index/dir ] 索引器从 [ input.csv ] 追加 [ index/dir ] 索引器从 [ input.csv ] 更新 [ index/dir...

    索引合并策略

    接下来,通过`FSDirectory.getDirectory(from, false)`获取源索引文件的目录,并将其作为参数传递给`indexWriter.addIndexes`方法,将源索引添加到合并列表中。调用`indexWriter.optimize()`执行实际的合并操作,...

    lucene.net2.9.4.2源码版

    它实现了倒排索引、分词、TF-IDF算法等核心搜索引擎技术,使得开发者能够轻松地在应用程序中实现全文搜索。 2. **核心组件**:Lucene.NET主要由以下组件构成:Analyzer(分析器)负责文本的分词;Document(文档)...

    lucene课件

    开发者可以通过编写Java代码,调用Lucene API创建、更新、读取和删除索引,实现自己的全文检索应用。 总结,Lucene 是一个强大的全文检索工具,能够有效地处理大规模文本数据的搜索需求,与传统的数据库搜索相比,...

    lucene.net2.9.4.2编译版

    Lucene是一个高性能、全文本搜索库,其核心功能包括文档索引、搜索、排序和高亮显示。它支持多种文本分析器,能够处理多种语言的文本数据。在2.9.4.2这个版本中,开发者对代码进行了优化,修复了已知的bug,以提供更...

    hibernateSearch 搜索 索引列子源代码

    **hibernateSearch 搜索 索引列子源代码** Hibernate Search 是 Hibernate 的一个扩展模块,它将全文搜索引擎的功能集成到了 Java 应用中,允许开发者在数据库中进行复杂的文本搜索。本教程将深入探讨 Hibernate ...

    索引 查询范例下载包

    压缩包中的"luceneDemo00"文件可能包含了一个使用Lucene实现的查询示例。这个示例可能包括如何创建索引,如何构建查询解析器,以及如何执行搜索等步骤。以下是一个基本的Lucene使用流程: 1. **初始化**: 创建一个`...

    一个功能强大的C#+ASP.NET实现的博客系统源程序代码

    可能使用全文搜索引擎如Lucene.NET,或者利用SQL查询实现简单的关键字匹配。 6. **界面设计**:使用ASP.NET的MVC(Model-View-Controller)模式,分离业务逻辑、数据展示和用户交互。HTML、CSS和JavaScript用于构建...

    盘古分词DLL文件

    盘古分词的DLL文件,就是将分词算法封装成的动态链接库,可供开发者在自己的应用程序中调用,以实现中文分词功能。 盘古分词,作为国内知名的中文分词工具,以其高精度和较快的分词速度而受到广泛应用。PanGu.dll是...

    开源企业搜索引擎SOLR的应用教程

    - **6.1.2 stored fields**:只存储真正需要的字段,减少索引文件的大小。 **6.2 Configuration Considerations** - **6.2.1 mergeFactor**:合并索引段的参数,合理的设置可以平衡索引的写入速度和查询性能。 - *...

    java实现es sql分页,采用SSM架构实现,开箱即用

    Elasticsearch是一个分布式、RESTful风格的搜索和分析引擎,基于Lucene构建。它的设计目标是使大规模数据搜索变得简单、快速。SQL(Structured Query Language)则是关系型数据库的查询语言,用于操作和检索数据。 ...

    SOLR的应用教程

    Solr基于Apache Lucene,它提供了更高级的功能,如集群、分布式搜索、复制和负载均衡,使得Solr更适合大规模、高并发的搜索应用。 1.2.2 Schema(模式) Schema是Solr的核心配置之一,用于定义索引字段、数据类型...

    net 开发搜索引擎

    在实际开发中,.NET开发者可能会使用如Lucene.NET这样的开源搜索引擎库来加速开发进程,它提供了一些核心的搜索引擎功能,如索引和查询。同时,对于大规模的搜索引擎,还需要考虑分布式系统的设计,如分布式爬虫、...

    PHP工程师面试笔试真题(某知名搜索引擎提供商)-附解析.doc

    - 在大数据量的表上,对性别字段这样的分类字段建立索引可能不会显著提升`select * from user where sex=1`这样的查询速度。 - `like "abc%"`类型的查询通常无法利用索引,因为它是从字符串中间开始匹配的。 - ...

    ASP源码—搜索主页.zip

    - 搜索索引:建立全文索引以提高查询速度,例如使用Lucene.NET这样的开源库。 - 异步处理:对于复杂查询,可以采用异步处理,避免阻塞用户界面。 7. 安全性 搜索功能需要注意SQL注入攻击,确保用户输入的数据经过...

Global site tag (gtag.js) - Google Analytics