Lucene简单示例详解

1、简介

Lucene是一套用于全文检索搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免

开源 工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与 搜索引擎 相混淆


2、实例


package com.search.lucene;

import java.io.File;


import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
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.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
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 org.junit.Test;

public class IndexFile {

    protected String[] ids={"1", "2"};

    protected String[] content={"Amsterdam has lost of add  cancals", "i love  add this girl"};

    protected String[] city={"Amsterdam", "Venice"};

    private Directory dir;
    /**
     * 初始添加文档
     * @throws Exception
     */
    @Before
    public void init() throws Exception {
        String pathFile="E:/indexPath";//创建索引存放位置
      //1.4 通过Analyzer 的创建指定索引语言词汇的分析器
        Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_47);
        
      //1.3 通过IndexWriterConfig的创建指定索引版本和语言词汇分析器
        IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_47, analyzer);
        
        //1.2 通过Directory的创建指定索引存放位置
        dir=FSDirectory.open(new File(pathFile));
        
        //1.1 创建IndexWriter,它的作用是用来写索引文件,
		//可以将IndexWriter看做是一个特定类型的数据库,用来存放各种表,可以将Document看做是一张张的表
		//该方法有两个参数,第一个dir参数为索引存放位置,参数类型为Directory,第二个参数conf为 IndexWriter的配置类
        IndexWriter writer = new IndexWriter(dir, iwc);
        
        for(int i=0; i < ids.length; i++) {
        	//2.1 创建Document指定要索引的文档
			//可以将Document看做是数据库中的一张张的表,而每个field都是表中的一个colum用来存放各种类型的信息,如标题、作者、时间等等
            Document doc=new Document();
            doc.add(new StringField("id", ids[i], Store.YES));
            doc.add(new TextField("content", content[i], Store.YES));
            doc.add(new StringField("city", city[i], Store.YES));
            writer.addDocument(doc);
        }
      //2.2表(Document)创建好之后,当然要添加到数据库(IndexWriter)中,同时commit
        writer.commit();
        writer.close();
    }

    /**
     * 查询
     * @throws Exception
     */
    @Test
    public void search() throws Exception {
        String filePath="E:/indexPath";
        //1.3 指定搜索目录
        Directory dir=FSDirectory.open(new File(filePath));
      
        //1.2创建IndexReader将搜索目录读取到内存
        IndexReader reader=DirectoryReader.open(dir);
        //1.1创建IndexSearcher准备搜索
        IndexSearcher searcher=new IndexSearcher(reader);
        //2.3 在content索引区搜索关键字“add”
        Term term=new Term("content", "add");
	    //2.2 创建Query生成查询语法树
        TermQuery query=new TermQuery(term);
        //2.1 获取搜索结果,搜索相似度最高的5条记录
        TopDocs topdocs=searcher.search(query, 5);
        ScoreDoc[] scoreDocs=topdocs.scoreDocs;
        System.out.println("查询结果总数: " + topdocs.totalHits+"   最大的评分:"+topdocs.getMaxScore());
        for(int i=0; i < scoreDocs.length; i++) {
            int doc = scoreDocs[i].doc;
            Document document = searcher.doc(doc);//命中的文件
            System.out.println("content===="+document.get("content"));
            System.out.println("id:" + scoreDocs[i].doc + "  score:" + scoreDocs[i].score+"  index:"+scoreDocs[i].shardIndex);
        }
        reader.close();
    }

}



3、java.lang.UnsupportedClassVersionError: org/apache/solr/client/solrj/SolrServerException : Unsupported major.minor version 51.0

Apache Lucene 4.8.0发布:不再支持Java 6,因为Lucene4.9要求Java版本最低为Java7,本人用的是4.7.2因为我安装的是jdk6



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值