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

创建索引和搜索初步

阅读更多

今天星期天抽空写了一个关于创建索引和搜索的简单示例,描述了创建索引和搜索的每一个步骤,以后慢慢详细介绍每个细节的实现,废话不多说了,进入重点

1.用到的Jar:

2.创建索引和搜索代码如下:

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.document.StringField;

import org.apache.lucene.document.TextField;

import org.apache.lucene.index.DirectoryReader;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.queryparser.classic.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.util.Version;

import java.io.File;

import java.io.FileReader;

 

/**

 * 创建索引和搜索

 * Created by Administrator on 14-3-12.

 */

public class HelloLucenes {

    /**

     * 创建索引

     */

    public void createIndex(){

        try

        {

        //1.创建Directory

        Directory directory=FSDirectory.open(new File("d:/lucene/index0"));

        //2.创建IndexWriter

        IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_47, new StandardAnalyzer(Version.LUCENE_47));

        IndexWriter writer=new IndexWriter(directory,iwc);

        //3.创建Document对象

        Document document=null;

        //4.为Document添加Field

         File file=new File("d:/lucene/data");

         for(File f:file.listFiles())

         {

             document=new Document();

             document.add(new StringField("path", f.getAbsolutePath(), Field.Store.YES));

             document.add(new StringField("filename",f.getName(), Field.Store.YES));

             document.add(new TextField("content",new FileReader(f)));

             //5.通过IndexWriter添加文档到索引中

             writer.addDocument(document);

         }

            writer.close();

        }catch (Exception ex)

        {

            ex.printStackTrace();

        }

    }

 

    /**

     * 创建搜索

     */

    public void createSearch()

    {

        try{

            //1、创建Directory

            Directory directory= FSDirectory.open(new File("d:/lucene/index0"));

            //2、创建IndexReader

            IndexReader reader=DirectoryReader.open(directory);

            //3、根据IndexReader创建IndexSearch

            IndexSearcher searcher=new IndexSearcher(reader);

            //4、创建搜索的Query(赤岸感觉Parser来去顶要搜索的文件的内容,第二个参数标示搜索的域)

            QueryParser parser=new QueryParser(Version.LUCENE_47,"content",new StandardAnalyzer(Version.LUCENE_47));

            Query query=parser.parse("father");

            //5、根据search搜索并且返回TopDocs

            TopDocs tds=searcher.search(query,10);

            //6、根据TOpDocs获取ScoreDoc对象

            ScoreDoc[] sds=tds.scoreDocs;

            for(ScoreDoc sd:sds)

            {

                //6、根据search和ScordDoc对象获取具体的Document对象

                Document d=searcher.doc(sd.doc);

                //8、根据Document对象获取需要的值

                System.out.println(d.get("filename")+"["+d.get("path")+"]");

            }

            //9、关闭reader

            reader.close();

 

        }catch (Exception ex)

        {

 

        }

 

    }

 

}

3.创建测试类代码如下:

import org.junit.Test;

 

/**

 * 单元测试类

 * Created by Administrator on 14-3-12.

 */

public class HelloLucenesTest {

 

    @Test

    public  void hello(){

        HelloLucenes hl=new HelloLucenes();

        hl.createIndex();

    }

 

    @Test

    public void search(){

        HelloLucenes hl=new HelloLucenes();

        hl.createSearch();

    }

}

4.目标数据文件如下图所示:



 

5.运行创建索引方法的结果如下图:



 6.运行搜索方法结果如下:



 


 

  • 大小: 24.4 KB
  • 大小: 27.8 KB
  • 大小: 19.9 KB
  • 大小: 35 KB
分享到:
评论

相关推荐

    Lucene实战视频教程

    资源名称:Lucene实战视频教程资源目录:【】01_lucenc简介和创建索引初步【】02_lucene简介和搜索初步【】03_lucene索引_创建_域选项【】04_lucene索引_的删除和更新【】05_lucene索引_加权操作和Luke的简单演示...

    使用B +树索引的关系数据库引擎-C/C++开发

    DeepDataBase关系数据库模型,基于B +树索引的初步开发的数据存储:系统显示表支持的MiniDataBase查询创建表插入表Tab DeepDataBase一个关系数据库模型,基于B +树索引的数据初步开发的支持的数据库存储。表将表创建...

    龙果学院 elasticsearch 72讲笔记

    2、es非常重要的一个api,是它的restful api,你自己思考一下,掌握这个es的restful api,可以让你执行一些核心的运维管理的操作,比如说创建索引,维护索引,执行各种refresh、flush、optimize操作,查看集群的健康...

    信息架构:超越Web设计(第4版)(全彩).[美]Louis Rosenfeld(带详细书签) PDF 下载 高清 完整版

    用户体验设计师、产品经理、开发人员和数字设计中涉及的所有人,都要学习如何创建帮助人们与你的信息进行交互的语义结构。 本书包括: 信息架构概述,以及为创建有效的数字产品和服务而解决的问题 深入探讨了信息...

    信息架构 超越Web设计(第4版).pdf

    初步演示报告 255 研究会议 255 利益相关者访谈 257 技术评估 258 内容 258 启发式评估 259 内容分析 260 内容映射262 标杆法 263 用户 265 使用分析 266 搜索日志分析 267 参与者定义和招募 270 客户支持数据 270 ...

    Oracle Database 11g初学者指南--详细书签版

    5.8 函数的创建和使用 149 5.9 调用PL/SQL程序 151 5.10 本章测验 152 第6章 数据库管理员 153 6.1 了解DBA的工作 154 6.2 执行日常操作 154 6.2.1 体系结构和设计 155 6.2.2 容量规划 155 6.2.3 备份和恢复...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    5.8 函数的创建和使用 5.9 调用PL/SQL程序 5.10 本章 测验 第6章 数据库管理员 6.1 了解DBA的工作 6.2 执行日常操作 6.2.1 体系结构和设计 6.2.2 容量规划 6.2.3 备份和恢复 6.2.4 安全 6.2.5 性能和调整 6.2.6 ...

    Access+2000中文版高级编程

    6.6.2 使用字段和索引创建新表 133 6.6.3 通过加入索引来修改现有表 136 6.7 小 结 136 第7章 使用VBA处理Access中的错误 138 7.1 Access中的错误消息 138 7.2 使用错误处理程序的不同方法 139 7.3 ...

    Access 2000中文版高级编程(part1)

    6.6.2 使用字段和索引创建新表 133 6.6.3 通过加入索引来修改现有表 136 6.7 小 结 136 第7章 使用VBA处理Access中的错误 138 7.1 Access中的错误消息 138 7.2 使用错误处理程序的不同方法 139 7.3 Access运行...

    TCK/TK组合教程

    第18章 tk初步 18.1 tk的hello,world! 18.2 命名tk部件 18.3 配置tk部件 18.4 tk部件属性和资源数据库 18.5 tk命令总结 第19章 例说tk 19.1 execlog 19. 2 浏览器示例 19.3 tcl外壳 第20章 pack...

    Python编程入门经典

    第Ⅰ部分 初步了解Python 第1章 编程基础和字符串 3 1.1 编程与使用计算机的区别 3 1.1.1 编程的一致性 3 1.1.2 编程的可控性 4 1.1.3 程序要应对变化 4 1.1.4 小结 4 1.2 准备工作 4 1.2.1 在非Windows系统上安装 ...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    10.2.2 创建和使用动态数组 294 10.2.3 指针运算 298 10.2.4 多维动态数组 299 10.3 类、指针和动态数组 300 10.3.1 ->操作符 301 10.3.2 this指针 301 10.3.3 重载赋值操作符 302 10.3.4 析构函数 309 ...

    “大数据”的认识与思考.doc

    国际数据公司(IDC)的研 究报告称,2011年全球被创建和被复制的数据总量为1.8ZB(2的70次方),并预测到20 20年,全球将拥有35ZB的数据量。二是数据类型众多 (Variety)。相对于过往以文本形式为主的结构化数据,...

    job-web-demo:Python Web实战项目,Flask + Jinja2 + Bootstrap开发的招聘网站

    简单的招聘网站范例 基于Flask / Jinja2 / Bootstrap / MySQL开发,仿照拉勾网的风格,实现了招聘网站的必需功能 ...职位和企业的索引页,详情页及搜索功能 个人简历上传和投递操作 企业对职位的增删改查上下线,以及对

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    。net图书管理系统设计方案

    在组合表的列中创建索引,包括主关键字和外部关键字所在的列。 b.在列或类组合中创建唯一的索引能增强唯一性。 c.浏览索引并卸载不使用的索引。索引需要一定硬盘空间和时间来维护。具有较高数据插入操作频率的数据库...

    freemarker总结

    除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由指令使用的受限sequences。 5、 方法:通过传递的参数进行计算,以新对象返回结果 方法变量通常是基于给出的参数计算值在数据模型中定义...

Global site tag (gtag.js) - Google Analytics