lucene创建index和搜索

package com.my.lucene.index;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.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;

public class TestIndex {

    // 创建索引
    public void index() {
        // path:文档的路径,
        File path = new File("d:\\lucene\\doc");
        Directory indexpath = null;
        IndexWriter writer = null;
        // 1.创建Directory:indexpath:索引存放的路径
        try {
            indexpath = FSDirectory.open(new File("d:\\lucene\\index"));

            // 2.创建indexwriter,参数:文档directory,分次器,大小
            writer = new IndexWriter(indexpath, new StandardAnalyzer(
                    Version.LUCENE_30), true, MaxFieldLength.LIMITED);

            // 3.创建document,将本地文档加载到document中
            Document doc = null;
            for (File files : path.listFiles()) {

                doc = new Document();
                // 本地文档内容添加到document -->索引中
                // field的格式key-value
                doc.add(new Field("content", new FileReader(files)));
                doc.add(new Field("name", files.getName(), Store.YES,
                        Index.NOT_ANALYZED));
                doc.add(new Field("path", files.getAbsolutePath(),
                        Field.Store.YES, Field.Index.NOT_ANALYZED));
                // 4.将文档添加到索引中
                writer.addDocument(doc);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                writer.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    // 搜索

    public void search() throws Exception {
        // 1.创建directory:从哪里搜索,就是创建索引的路径
        Directory indexpath = FSDirectory.open(new File("d:\\lucene\\index"));
        // 2.创建indexReader:打开index
        IndexReader reader = IndexReader.open(indexpath);
        // 3.根据indexReader创建indexSearch
        IndexSearcher search = new IndexSearcher(reader);
        // 4.创建搜索的query;参数:版本号,域名称,就是在创建索引的时候制定的Field("key",..)的key值,分次器
        QueryParser parser = new QueryParser(Version.LUCENE_30, "content",
                new StandardAnalyzer(Version.LUCENE_30));
        // parse的参数就是要搜索的内容,在文档中搜索java字段
        Query query = parser.parse("java");

        // 5.根据serach搜索并返回topdocs的文档:参数:query对象,搜索的条数
        TopDocs docs = search.search(query, 10);
        // 6.根据topdocs获取scoredoc
        ScoreDoc[] sc = docs.scoreDocs;

        for (ScoreDoc sd : sc) {

            // 7.根据search和scoredocs获取具体的document
            // d为文档的id,sd类似于数据库中的rs结果集,通过sd.doc得到文档的句柄(是创建索引时候生成的)
            // 通过文档的id得到具体的文档,从而得到文档内容
            Document d = search.doc(sd.doc);
            // 8.根据document获取具体的值
            // d.get()参数就是field的key
            System.out.println(d.get("name"));
            System.out.println(d.get("path"));
        }

    }

}

测试代码:

package com.my.lucene.test;

import org.junit.Test;

import com.my.lucene.index.TestIndex;

public class MainTest {
    @Test
    public void TestIndexJunit() throws Exception{
        TestIndex indexs = new TestIndex();
        //indexs.index();

            indexs.search();

    }

}
时间: 2024-10-31 15:32:29

lucene创建index和搜索的相关文章

利用lucene创建实现全站新闻搜索

jar包:lucene-core-2.3.2.jar 到相关官网下载 //建立线程通用类LuceneUtil  import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.Standar

搜索引擎系列 ---lucene简介 创建索引和搜索初步

一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子的中名,同时这也她外祖母的姓;目前是Apache基金会的一个顶级项目,同时也是学习搜索引擎入门必知必会. Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作. 优点:成熟的解决方案,有很多的成功案例.apache 顶级项目,正在持续快速的进步.庞大而活跃的开

搜索引擎系列 -lucene简介 创建索引和搜索初步步骤

一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子的中名,同时这也她外祖母的姓;目前是Apache基金会的一个顶级项目,同时也是学习搜索引擎入门必知必会. Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作. 优点:成熟的解决方案,有很多的成功案例.apache 顶级项目,正在持续快速的进步.庞大而活跃的开

Lucene.net 从创建索引到搜索的代码范例

关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB中加载.Field.Store.YES:存储字段值(未分词前的字段值)Field.Store.NO:不存储,存储与索引没有关系Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损Field.Index.ANALYZED:分词建索引 Field.Index.ANALYZE

创建索引和搜索

package cn.dyg.luence; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexW

记一次企业级爬虫系统升级改造(五):基于JieBaNet+Lucene.Net实现全文搜索

实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度非常棒. 刀不磨要生锈,人不学要落后.每天都要学一些新东西. 基本技术介绍: 还记得上一次做全文搜索是在2013年,主要核心设计与代码均是当时的架构师写的,自己只能算是全程参与. 当时使用的是经典搭配:盘古分词+Lucene.net. 前几篇文章有说到,盘古分词已经很多年不更新了,我在Support

创建一个提供搜索功能的搜索类(可运行)

/* * 这段代码的主要功能是对于创建索引的后的文件, * 创建一个提供搜索功能的搜索类. * */ package ch2.lucenedemo.process; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Date; import java.util.Iterator; import jav

Lucene.net站内搜索3—最简单搜索引擎代码

Lucene.Net核心类简介 先运行写好的索引的代码,再向下讲解各个类的作用,不用背代码. (*)Directory表示索引文件(Lucene.net用来保存用户扔过来的数据的地方)保存的地方,是抽象类,两个子类FSDirectory(文件中).RAMDirectory (内存中).使用的时候别和IO里的Directory弄混了. 创建FSDirectory的方法,FSDirectory directory =FSDirectory.Open(new DirectoryInfo(indexPa

基础:从概念理解Lucene的Index(索引)文档模型

转:http://blog.csdn.net/duck_genuine/article/details/6053430 目录(?)[+] Lucene主要有两种文档模型:Document和Field,一个Document可能包含若干个Field. 每一个Field有不同的策略: 1.被索引 or not,将该字段(Field)经过分析(Analyisi)后,加入索引中,并不是原文 . 2.如果被索引,可选择是否保存“term vector”(向量),用于相似检索. 3.可选择是否存储(store