Lucene创建索引

来源:互联网 发布:三维立体动画制作软件 编辑:程序博客网 时间:2024/06/08 09:29

所有的代码都是基于maven管理的.
    环境:
        maven: 3.3.3
        eclipse
        jdk7, tomcat7, mac系统
    pom.xml展示

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.zero.lucene</groupId>  <artifactId>Lucene</artifactId>  <version>0.0.1-SNAPSHOT</version>  <dependencies>    <dependency>        <groupId>org.apache.lucene</groupId>        <artifactId>lucene-core</artifactId>        <version>5.1.0</version>    </dependency>    <dependency>        <groupId>org.apache.lucene</groupId>        <artifactId>lucene-queryparser</artifactId>        <version>5.1.0</version>    </dependency>    <dependency>        <groupId>org.apache.lucene</groupId>        <artifactId>lucene-analyzers-common</artifactId>        <version>5.1.0</version>    </dependency>    <!-- 中文分词 -->    <dependency>        <groupId>org.apache.lucene</groupId>        <artifactId>lucene-analyzers-smartcn</artifactId>        <version>5.1.0</version>    </dependency>    <!-- 关键词高亮 -->    <dependency>        <groupId>org.apache.lucene</groupId>        <artifactId>lucene-highlighter</artifactId>        <version>5.1.0</version>    </dependency>  </dependencies></project>

    创建索引

package com.zero.lucene;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.nio.file.Paths;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.TextField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.FSDirectory;/** * 建立索引 * @author samuel */public class Indexer {    private IndexWriter writer;    /**     * 实例化写入索引的对象     * @param saveDir       索引写入的位置(建立好的索引存放的位置)     * @throws Exception     */    public Indexer(String saveDir) throws Exception{        FSDirectory fsdDir = FSDirectory.open(Paths.get(saveDir));        // 标准分词器        Analyzer analyzer = new StandardAnalyzer();        IndexWriterConfig conf = new IndexWriterConfig(analyzer);        writer = new IndexWriter(fsdDir, conf);    }    /**     * 关闭写入流     * @throws IOException     */    public void close() throws IOException {        writer.close();    }    public void index(String dataDir) throws Exception {        // 需要索引数据的目录        /**         * 1. 查询到目录下所有的文件         * 2. 对每个文件进行建立索引         *///      String dataDir = "/Users/samuel/Documents/lucene/lucene/";        // 1        File[] files = new File(dataDir).listFiles();        for (File file : files) {            // 2 对每个文件进行索引            indexFile(file);        }        System.out.println(writer.numDocs());        writer.close();    }    private void indexFile(File file) throws IOException {        Document doc = getDcoument(file);        writer.addDocument(doc);    }    private Document getDcoument(File file) throws FileNotFoundException {        Document doc = new Document();        doc.add(new TextField("contents", new FileReader(file)));        doc.add(new TextField("fileName", file.getName(), Store.YES));        return doc;    }    public static void main(String[] args) {        String saveDir = "/Users/samuel/Documents/lucene";        String dataDir = "/Users/samuel/Documents/lucene/lucene";        Indexer indexer = null;        try {            indexer = new Indexer(saveDir);            indexer.index(dataDir);        } catch (Exception e) {            e.printStackTrace();        }finally {            try {                indexer.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

一个原生态的Lucene创建索引就这样OK啦.

0 0
原创粉丝点击